VBA: можно вызвать рабочий лист, используя строку? - PullRequest
2 голосов
/ 25 марта 2011

У меня есть макрос, который я хотел бы использовать несколько (> 20) раз, но каждый раз он должен ссылаться на другой лист.Например, если мои листы называются S1, S2, S3 и т. Д., Для одного конкретного использования макроса необходимо вызвать S2.

Я попытался определить общедоступную строку как «Публичный CS какString ", а затем вложить макросы для достижения цели (без копирования и вставки всего макроса 20+ раз).

Например,

Sub Macro_2()

    CS = "S2"

    Macro

End Sub

Однако я получаю сообщение об ошибке,«Подписчики вне диапазона», относящиеся к этой строке кода в основном макросе, где я вызываю нужный лист:

Sheets(" 'CS' ").Select

Я ценю помощь !!!

Ответы [ 2 ]

1 голос
/ 25 марта 2011

Гм .. Параметры?

public sub YourMacro(byval SheetName as string)
   Sheets(SheetName).select
end sub

Sub Macro_2() 
  YourMacro "S2"
End Sub
0 голосов
/ 25 марта 2011

Вы можете написать подпрограмму, которая вызывает ваш макрос для всех ваших листов, например:

Sub ProcessAllSheets()

    numberOfSheets = 10 ' Or whatever

    ' Loop through all sheets
    For i = 1 To numberOfSheets
        sheetName = "S" & i ' sheetName will be "S1" when i=1, "S2" when i=2 etc.
        Call Macro_2(sheetName)
    Next i

End Sub

или только один лист за раз:

Sub ProcessOneSheet()
    sheetName = "S7"
    Call Macro_2(sheetName)
End Sub

Вашему макросу потребуется небольшое редактирование, чтобы принять аргумент sheetName:

Sub Macro_2(sheetName)
    ' Macro_2 is not a very useful name...
    ' Call it something more descriptive!

    CS = sheetName
    ' CS isn't a very good variable name either...
    ' Why not just replace CS with e.g. sheetName

    'Macro code goes here...

End Sub

NB. Большинство программистов советуют вам избегать переменных Public, если только вы не знаете, что это лучший способ решить вашу проблему (чего не происходит в вашем случае). Public a.k.a. глобальные переменные часто приводят к трудным для поиска ошибкам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...