如何让Excel VBA中的Sub过程不修改传入的输入数据?
如何避免Excel VBA中调用Sub过程时传入变量被修改?
你遇到的问题根源是VBA默认采用**按引用传递(ByRef)**参数,子过程里对参数的修改会直接同步到原变量上。要让debug.print输出3而非8,有两种实用解决方式:
方法一:调用时强制按值传递
在传入变量外层加括号,VBA会自动生成变量的副本传递给子过程,原变量不会被修改。修改后的代码如下:
sub main() i = 3 SomeSub (i) ' 加括号强制按值传递 debug.print i ' 输出3 end sub sub SomeSub(j) j=j+5 end sub
方法二:在Sub过程声明中指定按值传递
直接修改子过程的参数定义,用ByVal关键字明确参数按值传递,这样无论怎么调用,原变量都不会被子过程改动。修改后的代码如下:
sub main() i = 3 SomeSub i debug.print i ' 输出3 end sub sub SomeSub(ByVal j) ' 用ByVal指定按值传递 j=j+5 end sub
两种方法都能实现需求,方法二更稳妥——它从过程定义层面固定了参数传递规则,避免后续调用时因忘记加括号导致的意外修改。
内容的提问来源于stack exchange,提问作者user12451009
相关产品推荐
相关产品推荐

