vba - 在 VB.net 中替代 GoSub
问题描述
我被分配了一个项目来替换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
我正在考虑使用 aCall
替换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
in Sub Execute
,但要做到这一点,我需要重新声明用于A
在 Main 中定义的所有变量,其中有很多。
在我的情况下,最好/最有效的替换方法是GoSub
什么?
解决方案
根据我上面的评论,您的代码应如下所示:
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
,您可能希望将重构视为更长期的解决方案。
推荐阅读
- excel - 打开第二个 Excel 工作簿时的自定义选项卡顺序宏和功能障碍
- python - 带有 IO 的 python 基本电话簿应用程序
- ruby - Ruby RBS - 如何在 rbs/stdlib 中包含类,例如 BigDecimal?
- php - WordPress / PhpStorm 脚本损坏
- python - 如何将网络抓取中的所有元素放入列表中
- javascript - /Python / [Selenium 我想创建一个“图(请检查)”的无限循环
- powershell - 如何从函数中获取结果
- php - PHP 密码验证
- python-3.x - 如何将 telnet 输出日志保存到文本文件
- django - Django Faker 递归外键