Вы можете использовать метод фильтра массива для проверки существования:
dim arrSheets() as string
arrSheets = Split("sheetNameOne,sheetNameTwo,sheetNameThree", ",")
if ubound(filter(arrsheets,"sheetNameOne"))>-1 then debug.print "Sheet is in list"
Редактировать: расширенный ответ по запросу ...
Я использовал имена листов для краткости, а не объекты листа так как вам просто нужно перечислить имена листов в строке через запятую. Чтобы использовать фактические объекты, как вы это сделали в своем коде, вам необходимо присвоить их массиву, например так:
Dim arrSheets(3) as string
arrSheets(0) = ws_master_tracker.name
arrSheets(1) = ws_title_page.name
arrSheets(2) = ws_sample.name
Вместо строки;
arrSheets = Split("Master Tracker,Title Page,Sample Sheet", ",")
Split
метод берет строку и разбивает ее на элементы массива на основе разделителя, в приведенном выше примере запятая. Представьте себе текст в столбцы в Excel.
Свойство Ubound
описывает количество элементов в массиве - три в этом примере. Он основан на нуле, т. Е. 1 экземпляр вернет 0, 2 экземпляра = 1, 3 = 2 и т. Д.
Метод Filter
возвращает новый массив, содержащий только элементы, соответствующие указанным критериям, в этом case заданное c имя листа. Как прокомментировал Тим Уильямс, метод будет включать подстроки, поэтому, если у вас есть лист с именем «мой лист», а другой с именем «какой-то другой лист», фильтрация по слову «лист» вернет оба.
Соединение их вместе: Split
создает массив из строки, фильтрация возвращает массив, содержащий запрашиваемую строку (и), Ubound
сообщает, сколько раз эта строка находится в фильтруемом массиве. Если его нет, Ubound вернет -1, в противном случае число больше -1.
В исходном коде это скажет вам, является ли имя листа одним из имен, которые вы хотите опустить. Затем вам нужно будет проверить, скрыт ли этот лист отдельно.
if ubound(filter(arrsheets,"sheetNameOne"))=-1 then ' the sheet is not in the list
if sheets("sheetNameOne").Visible = xlSheetHidden Then ' is it hidden?