我有一个宏,我想使用几次(> 20次),但每次需要引用不同的工作表。例如,如果我的工作表名为S1,S2,S3等,对于宏的一个特定用途,则需要调用S2。
我尝试将公共字符串定义为“Public CS As String”,然后嵌套宏以实现目标(不复制和粘贴整个宏20次)。
例如,
Sub Macro_2()
CS = "S2"
Macro
End Sub
但是,我收到一条错误消息“订阅超出范围”,引用主宏中的这行代码,我调用所需的工作表:
Sheets(" 'CS' ").Select
我很感激帮助!!!
答案 0 :(得分:1)
嗯..参数?
public sub YourMacro(byval SheetName as string)
Sheets(SheetName).select
end sub
Sub Macro_2()
YourMacro "S2"
End Sub
答案 1 :(得分:0)
您可以编写一个子程序,为您的所有工作表调用宏,如下所示:
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
注意:大多数程序员会建议您远离Public
变量,除非您明确知道这是解决问题的最佳方法(在您的情况下不是这样)。 Public
a.k.a.全局变量通常会导致难以发现的错误。