在宏中传递的变量在调用子运行时会发生变化

Passed Variables in macro change when called sub is run

提问人:Jeff 提问时间:11/10/2022 最后编辑:Jeff 更新时间:11/10/2022 访问量:34

问:

我有一个master_macro调用其他 2 个宏:(sub)calc 和 (sub)transfer。calc 宏不需要传递给它的任何变量,但另一个变量需要,当master_macro调用传输宏时,有几个传递的变量正在被修改,即使它们是使用 byval 方法传递的。这些声明嵌套在 for 循环中,因为它们是工作簿名称。

dpath = ws.cells(2,9).value
fname = ws.cells(i,10).value
set wkbk = workbooks.open(dpath & fname & ".xlsx")
call calc

tempname = ws.cells(4,9).value
fpath = ws.cells(3,9).value
temppath = ws.cells(5,9).value
set wkbk2 = workbooks.open(temppath & tempname) 'the tempname should have the extension

call transfer(fname, dpath, fpath, tempname, wkbk, wkbk2)

以下是我如何启动传输子例程。

sub transfer(byval fname, byval dpath, byval fpath, byval tempname, byval wkbk, byval wkbk2)

我在调用点有断点来逐步执行它,看看变量是什么。不知何故,fpath 和 tempname varialbes 被切换了。我的印象是,如果使用 byval,它们就无法更改。我注意到这个错误,一旦传输运行并在循环中的“下一个 i”中断,它就没有将临时名称保存在 fpath 文件夹中。

Excel VBA 变量 按值传递

评论

4赞 BigBen 11/10/2022
看起来您的参数顺序是向后的。不应该来之前吗?Call transfer(...)fpathtempname
0赞 Jeff 11/10/2022
做到了。谢谢。我认为这无关紧要,因为变量名称。
1赞 BigBen 11/10/2022
你混淆了变量和参数。 中的变量与 的参数不同。fnamemaster_macrofnametransfer

答: 暂无答案