Вы можете использовать что-то подобное в модуле кода первого листа:
Private Sub Worksheet_Activate()
Const LIST_COL As Long = 26
Dim sht As Worksheet, i As Long
i = 1
Me.Columns(LIST_COL).ClearContents '<< clear current list
For Each sht In ThisWorkbook.Worksheets '<< collect all the values
If sht.Name <> Me.Name Then
Me.Cells(i, LIST_COL).Value = sht.Range("myTest").Value
i = i + 1
End If
Next sht
End Sub
Он соберет значения из других листов в диапазон, который вы можете использовать для списка проверки.
Примечание: если значения другого листа обновляются с помощью кода или формул (т. Е. Вам не нужно переходить на каждый лист для изменения значений), вам потребуется проделать немного больше работы.
РЕДАКТИРОВАТЬ - это более запутанный, но работает более надежно, так как он запускается всякий раз, когда вы нажимаете на раскрывающийся список проверки
1. Поместите это в обычныймодуль (при необходимости измените):
'A function to return a range containing the
' various values which need to appear in the validation list
Public Function ListCompile() As Range
Const LIST_COL As Long = 26 '<< create the list in Col Z
Dim sht As Worksheet, i As Long
i = 1
Sheet1.Columns(LIST_COL).ClearContents
For Each sht In ThisWorkbook.Worksheets
If sht.Name <> Sheet1.Name Then
Sheet1.Cells(i, LIST_COL).Value = sht.Range("myTest").Value
i = i + 1
End If
Next sht
'return the list we just created
Set ListCompile = Sheet1.Cells(1, LIST_COL).Resize(i, 1)
End Function
Примечание. Я использую кодовое имя для Sheet1 (которое может отличаться от имени вкладки).Вы можете увидеть кодовое имя в редакторе VB Project Explorer.
2. Определить именованный диапазон "tester" с "RefersTo", равным ListCompile()
3. Наконец, установите диапазон списка проверки данных: =tester