String VBA:是否可以使用字符串调用工作表?

String VBA:是否可以使用字符串调用工作表?,string,vba,excel,String,Vba,Excel,我有一个宏,我想使用几次(>20次),但每次都需要引用不同的工作表。例如,如果我的工作表被命名为S1、S2、S3等,对于宏的一个特定用途,它需要调用S2 我尝试将一个公共字符串定义为“public CS as string”,然后嵌套宏以实现这一目标(无需复制和粘贴整个宏20多次) 比如说, Sub Macro_2() CS = "S2" Macro End Sub 但是,我收到一条错误消息,“下标超出范围”,指的是主宏中的这行代码,我在其中调用所需的工作表: Sheet

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

我尝试将一个公共字符串定义为“public CS as string”,然后嵌套宏以实现这一目标(无需复制和粘贴整个宏20多次)

比如说,

Sub Macro_2()

    CS = "S2"

    Macro

End Sub
但是,我收到一条错误消息,“下标超出范围”,指的是主宏中的这行代码,我在其中调用所需的工作表:

Sheets(" 'CS' ").Select
我感谢你的帮助

嗯。。参数

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

Sub Macro_2() 
  YourMacro "S2"
End Sub

您可以编写一个子例程,为所有图纸调用宏,如下所示:

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

注意:大多数程序员都会建议您通常远离
公共变量
,除非您明确知道这是解决问题的最佳方法(您的情况并非如此)<代码>公共a.k.a.全局变量通常导致难以发现的错误

如上所述,您必须使用
工作表(CS)。选择
,或者,如果您不想使用变量,选择
工作表(“S2”)。注意:不能保证工作表
“Si”
对应于索引
i
。。。如果你认为这是理所当然的,那么你可能会得到不可预测的结果。。。最好把名字放在一张单独的纸上,然后从那里开始工作,这样你就可以随时更改它,而不必触碰代码