Тим Уильямс дал вам ответ
Здесь я дам вам еще несколько предложений
код 1
Option Explicit
Sub SetSheetList()
Dim wb As Workbook: Set wb = ThisWorkbook
Dim wsInputsList As Worksheet: Set wsInputsList = wb.Sheets("InputsTab")
Dim lastrowInputs As Long, i As Long
lastrowInputs = wsInputsList.Cells(Rows.Count, 1).End(xlUp).Row
ReDim ws(1 To lastrowInputs) As Worksheet 'dim your array only once
For i = 1 To lastrowInputs
Set ws(i) = wb.Sheets(wsInputsList.Cells(i, 1).Value)
Next
End Sub
, куда
- переехал затемнение массива за пределы l oop, чтобы не затемнять его
lastrowInputs
раз ... - использовал
For … Next
l oop, который в большей степени соответствует вашему делу (делает то, что вам нужно, делает это четко и в меньше заявлений)
, но листинг такого типа имеет некоторые недостатки, например, наличие в списке имени, которое более не актуально. В этом случае вы можете рассмотреть
Код 2
Option Explicit
Sub SetSheetList2()
Dim wb As Workbook: Set wb = ThisWorkbook
Dim wsInputsList As Worksheet: Set wsInputsList = wb.Sheets("InputsTab")
Dim shtName As String
Dim lastrowInputs As Long, i As Long, nshts As Long
lastrowInputs = wsInputsList.Cells(Rows.Count, 1).End(xlUp).Row
ReDim ws(1 To lastrowInputs) As Worksheet 'dim your array only once
For i = 1 To lastrowInputs
shtName = wsInputsList.Cells(i, 1).Value ' store current "possible" sheet name
If IsSheetThere(wb, shtName) Then ' if current "possible" sheet name is an "actual" one
nshts = nshts + 1 ' update sheet names found
Set ws(nshts) = wb.Sheets(shtName) ' update sheets array
End If
Next
If nshts < lastrowInputs Then ReDim Preserve ws(1 To nshts) As Worksheet 'redim your array to the actual number of items stored, if needed
End Sub
И все же есть шанс, что список имен ваших листов в "InputsTab" не является исчерпывающим ...
Как вы видите Хранить и использовать такой список может быть гораздо сложнее, чем может показаться вначале: нужно сосредоточиться на том, что вам действительно нужно и почему