Вот очень быстрый и грязный способ.
MySheetName = "Sheet1 Sheet2 Sheet_Named_Fred"
.... просто перечислите все имена листов с пробелом (или чем-то еще) между ними.
Затем замените строкуIf Application.ActiveSheet.Name = MySheetName Then
С
If Instr (MySheetName, Sh.Name)> 0 Тогда
Если вы предпочитаете, используйте «Application.Activesheet».Имя "вместо моего" Sh.Name ".«Sh» - это параметр, передаваемый этой стандартной функции события, и это только что активированный рабочий лист, поэтому ваш код будет выглядеть немного чище, если вы замените «Application.ActiveSheet.Name» на «Sh.name» во всем.
Функция «INSTR» возвращает> 0, если вторая строка появляется где-либо в первой строке (в частности, номер позиции символа).Поэтому, если имя активной таблицы появляется где-либо вообще в длинной строке имен листов, оно будет подвергнуто проверке вашего пароля.
Это «быстро и грязно», потому что произойдет сбой, если какое-либо из имен вашей рабочей таблицыявляются подстроки другого имени листа.Например, если у вас есть рабочие таблицы с именами «Итоги» и «GrandTotals», то, если вы добавите «GrandTotals» в свою длинную строку, то активация «Итоги» ТАКЖЕ вызовет функцию INSTR.[код удален] Я только что отредактировал это, чтобы удалить код, который делает это «наверняка», сверяясь с массивом имен рабочих листов.Другие ниже предлагают коллекцию или другую структуру данных.Но есть простой способ защиты от сбоев вышеупомянутого простейшего решения.Не разрешается использовать * (или несколько других символов) в имени листа.Таким образом, строка имен, требующих ввода пароля, может быть просто:
MySheetName = "*Sheet1
* *Sheet2
* *Sheet_Named_Fred
*"
И тогда при поиске имени в INSTR нужны звездочки по обе стороны от имени листа:
IF INSTR(MySheetName, "*"+Sh.Name+"
*")>0 Then
... и все готово.Никакие коллекции или другие сложные поиски имен не нужны.