我想将函数/子名称作为参数传递,以便可以在Excel VBA中的另一个函数/子中调用它。这可能吗?如果是这样,我将其设置为哪种类型?我尝试将其设置为“变体”,但没有用。我不确定还有什么尝试。
这是我正在处理的代码的基本概述。包括我使用Variant的失败尝试。
如您所见,我正在尝试让BBG每次检查不同的范围,然后每次调用不同的子程序。这就是为什么我希望能够指定在等待BBG完成后要调用哪个子程序。
更新:我使用Application.Run而不是Call更新了代码
Sub part_1
Dim calculation_rng as String
calculation_rng = "A1"
Call waitingBBG(calculation_rng, "part_2")
End Sub
Sub waitingBBG(calculation_rng As String, call_id As Variant)
If Application.WorksheetFunction.CountIfs(Range(calculation_rng), "#N/A Requesting Data...") > 0 Then
'Check every 1 second
Application.OnTime Now + TimeValue("00:00:01"), "waitingBBG"
Else
'Call rest of code
Application.Run "'my_addin.xlam'!" & call_id
End If
End Sub
Sub part_2
Dim calculation_rng as String
calculation_rng = "B1"
Call waitingBBG(calculation_rng, "part_3")
End Sub
Sub part_3
Msgbox("Success")
End Sub
答案 0 :(得分:1)
@MathieuGuindon提供了正确的解决方案。谢谢!
基本上,我需要将函数名称作为字符串传递,并使用Application.Run
而不是Call
也是
Application.OnTime Now + TimeValue("00:00:01"), "waitingBBG"
需要更改为
Application.OnTime Now + TimeValue("00:00:01"), "'waitingBBG """ & calculation_rng & """,""" & call_id & "'"
反映变化。
答案 1 :(得分:-1)
Sub sub1()
Dim a As String
a = "hii"
sub2 (a)
End Sub
Sub sub2(val As String)
If val = "hi" Then
MsgBox (val)
Else
MsgBox ("sub2 else")
sub3 (val)
End If
End Sub
Sub sub3(val1 As String)
MsgBox (val1)
End Sub