проверка данных Excel VBA - PullRequest
0 голосов
/ 16 января 2020
Option Explicit

Sub MakeValidationList()
    Dim ws As Worksheet

    Set ws = ThisWorkbook.Sheets("Sheet1")

    Dim dataRange As Range
    Set dataRange = ws.Range("A1:A3,C1:C3")

    Dim dataList As String
    Dim entry As Variant
    For Each entry In dataRange
        dataList = dataList & entry.Value & ","
    Next entry
    '--- remove the last trailing comma
    dataList = Left$(dataList, Len(dataList) - 1)

    Dim dropDownCell As Range
    Set dropDownCell = ws.Range("B3:B10")
    dropDownCell.Validation.Delete
    dropDownCell.Validation.Add Type:=xlValidateList, _
                                AlertStyle:=xlValidAlertStop, _
                                Formula1:=dataList
End Sub

из приведенных выше данных, как можно взять диапазон проверки данных из sheet2, потому что он работает для sheet1 (тот же лист)? запросить обучение

1 Ответ

1 голос
/ 16 января 2020

Я бы сказал, что есть два простых способа извлечь данные из другого листа в метод Validation.Add. Ниже приведен лишь пример, демонстрирующий эту технику:

Sub Test()

'Set your two worksheets
Dim ws1 As Worksheet: Set ws1 = ThisWorkbook.Worksheets("Sheet1")
Dim ws2 As Worksheet: Set ws2 = ThisWorkbook.Worksheets("Sheet2")

'Set your range objects where you want a validation list
Dim rng1 As Range: Set rng1 = ws1.Range("A1")
Dim rng2 As Range: Set rng2 = ws1.Range("B1")

'Set your source range
Dim rng3 As Range: Set rng3 = ws2.Range("A1:A3")

'Set an array (for option 1)
Dim arr As Variant: arr = rng3.Value

'Option 1:
rng1.Validation.Add xlValidateList, Formula1:=Join(Application.Transpose(arr), ",")

'Option 2:
rng2.Validation.Add xlValidateList, Formula1:="='" & ws2.Name & "'!" & rng3.Address

End Sub

С помощью опции 1 вы можете добавить любой 2D-массив в список проверки (сбросьте Application.Transpose, если он уже есть в памяти).

При выборе варианта 2 вы ссылаетесь на другой лист в объединенной формуле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...