我被分配了一个项目,以替换基于GoSubs
的应用程序中的所有VBA
,因为此应用程序正在切换到VB.net
,并且那里不支持GoSubs
。这是原始代码的简化版本:
Sub Main ()
Dim A As String
...
If ConditionX Then A = "Black"
Else A = "White"
End If
...
GoSub Execute
...
Execute:
Call BuiltInSub1 (A)
Call BuiltInSub2 (A)
'where BuiltInSubs are some predefined procedures within the application
...
Return
End Sub
我正在考虑使用Call
替换GoSub
,如下所示:
Sub Main ()
Dim A As String
If ConditionX Then A = "Black"
Else A = "White"
End If
...
Call Execute
...
End Sub
Sub Execute ()
...
Call BuiltInSub1 (A)
Call BuiltInSub2 (A)
...
End Sub
上面修改后的版本明显的错误是A
中没有声明变量Sub Execute
。我可以想到的一个选择是在A
中重新定义Sub Execute
,但是要做到这一点,我将需要重新声明Main中用于定义A
的所有变量。几个。
在我的情况下,替换GoSub
的最佳/最有效方法是什么?
答案 0 :(得分:4)
根据我上面的评论,您的代码应如下所示:
Sub Main ()
Dim A As String
If ConditionX Then A = "Black"
Else A = "White"
End If
...
Execute(A)
...
End Sub
Sub Execute(A As SomeType)
...
BuiltInSub1(A)
BuiltInSub2(A)
...
End Sub
如果确实发现需要声明参数ByRef
,则可能希望将重构作为更长期的解决方案。
答案 1 :(得分:3)
我相信lamda函数可能在VB.net中具有嵌套变量范围)
Dim A
Dim B
Dim xecute = function()
BuiltInSub1(A)
BuiltInSub2(A)
End Sub
A = 1
B=xecute()
A=2
B=xecute()