Я бы сказал, что есть два простых способа извлечь данные из другого листа в метод 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 вы ссылаетесь на другой лист в объединенной формуле.