VBA无需全局声明如何将InputBox变量从一个Sub传递到另一个Sub
问题解答
你当前的代码写法存在错误,无法正常运行:
- 你定义的
Test2过程要求传入一个字符串类型的参数,但你在MonthTest里调用Test2时没有传入任何参数,运行时会抛出参数不匹配的报错。 - 你原本不使用全局变量、通过过程传参传递值的思路是完全正确的,这种写法可以避免全局变量污染作用域,后期代码可维护性更高。
修正后的代码
你只需要修改MonthTest里的调用语句即可:
Option Explicit Sub MonthTest() Dim strMonth As String strMonth = InputBox("enter Area here") ' 调用Test2时传入获取到的strMonth参数 Call Test2(strMonth) ' 也可以省略Call关键字,写法为 Test2 strMonth End Sub Sub Test2(strMonth As String) Select Case strMonth Case Is = "82" Call Area82 Case Is = "80" Call Area80 End Select End Sub
额外优化建议
如果要考虑用户点击InputBox取消的场景,还可以加一层空值判断,避免无意义的参数传递:
Sub MonthTest() Dim strMonth As String strMonth = InputBox("enter Area here") ' 判断用户是否输入了内容,取消/空输入直接退出 If strMonth = "" Then Exit Sub Call Test2(strMonth) End Sub
内容的提问来源于stack exchange,提问作者Paxton
相关产品推荐
相关产品推荐

