В настоящее время я работаю над макросом в рабочей книге с несколькими листами, целью которой является показать и скрыть определенные листы на основе значений в главном листе. Имена рабочего листа также содержатся в главном рабочем листе, и основная процедура просматривает эти значения при обращении к рабочему листу, который необходимо показать или скрыть. Проблема этого метода заключается в том, что макрос выдаст ошибки, если пользователь изменит имена вкладок листа. Я надеялся вставить дополнительную процедуру, которая делает имена вкладок каждого рабочего листа равными значениям в соответствующей ячейке основного рабочего листа. Я придумал следующее:
Sub SheetName()
If Not ActiveWorkbook Is ThisWorkbook Then Exit Sub
Dim DataImport As Worksheet
Set DataImport = ThisWorkbook.Worksheets("Data Import")
DataImport.Range("A13").Value = Sheet1.Name
End Sub
Этот код работает нормально, но в этой книге более 100 листов. Мне было интересно, есть ли более эффективный способ сделать это, а не вводить одну и ту же процедуру 100 раз. Я попытался сохранить имена кодов листа в массиве и повторить ту же процедуру в массиве, например:
Sub test()
Dim DataImport As Worksheet
Set DataImport = ThisWorkbook.Worksheets("Data Import")
Dim index As Long
Dim ws(0 To 2) As Worksheet
Set ws = Array(Sheet1, Sheet2, Sheet3)
For i = 13 To 14
index = i - 13
DataImport.Cells(i, "A").Value = ws(index).Name
Next i
End Sub
, но появляется сообщение об ошибке «Can't Assign to Array». Извините заранее, если мой код выглядит мусором, я все еще новичок в VBA, и мне еще многое предстоит узнать.