VBA:可以使用字符串调用工作表吗?

时间:2011-03-24 23:55:34

标签: string vba excel-vba excel

我有一个宏,我想使用几次(> 20次),但每次需要引用不同的工作表。例如,如果我的工作表名为S1,S2,S3等,对于宏的一个特定用途,则需要调用S2。

我尝试将公共字符串定义为“Public CS As String”,然后嵌套宏以实现目标(不复制和粘贴整个宏20次)。

例如,

Sub Macro_2()

    CS = "S2"

    Macro

End Sub

但是,我收到一条错误消息“订阅超出范围”,引用主宏中的这行代码,我调用所需的工作表:

Sheets(" 'CS' ").Select

我很感激帮助!!!

2 个答案:

答案 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.全局变量通常会导致难以发现的错误。