通过传递变量参考功能名称

时间:2017-05-30 11:02:33

标签: vba excel-vba excel

这一行:

Set ws = wb.Worksheets(Module2.FirstBBSName)

将工作表设置为函数返回的名称,该名称将是工作表的名称。

但是,在此子目录中,需要更改为:

Set ws = wb.Worksheets(Module2.SecondBBSName)

Set ws = wb.Worksheets(Module2.ThirdBBSName)

等等。我需要通过从call通过变量传递名称来完成此操作。让我们将其命名为SheetNameReturn

所以,如果我发送:

Call NameOfMySub ("SecondBBSName")

如果我使用

,它将无效
Set ws = wb.Worksheets(Module2.SheetNameReturn)

显然,它在Module2中寻找SheetNameReturn而不是变量。

我需要做些什么才能让它看一下传递的变量?

1 个答案:

答案 0 :(得分:3)

您可以使用Application.Run运行由变量命名的函数。

请参阅下面的代码 - strFunction(可能是SheetNameReturn)获取函数的名称(可选择使用模块前缀),然后将该字符串传递给Run以调用函数

<强>模块1:

Option Explicit

Sub Test()

    Dim wb As Workbook
    Dim ws As Worksheet
    Dim strFunction As String

    Set wb = ThisWorkbook

    strFunction = "Module2.FirstBBSName"
    Set ws = wb.Worksheets(Application.Run(strFunction))
    Debug.Print ws.Name

    strFunction = "Module2.SecondBBSName"
    Set ws = wb.Worksheets(Application.Run(strFunction))
    Debug.Print ws.Name

    strFunction = "Module2.ThirdBBSName"
    Set ws = wb.Worksheets(Application.Run(strFunction))
    Debug.Print ws.Name

End Sub

<强>单词数:

Option Explicit

Function FirstBBSName()
    FirstBBSName = "Sheet1"
End Function
Function SecondBBSName()
    SecondBBSName = "Sheet2"
End Function
Function ThirdBBSName()
    ThirdBBSName = "Sheet3"
End Function