我有两个excel文件,一个是patcher.xlsm,一个是file.xlsm。在file.xlsm上有一个按钮,当它点击时,它会执行工作表1上的一个带有消息框的过程:神奇的数字是: 5。
现在,我有了一个patcher.xlsm,它将重新导入一个打了补丁的工作表1和一个带有全局变量的标准模块,并在file.xlsm上运行一个宏,将这个数字设置为7。预期的结果是,单击file.xlsm的用户现在会看到神奇的数字是: 7。
由于某些原因,每当我执行patcher.xlsm,时,幻数总是被重置为0,就好像内存已被清除或项目重置一样。
有没有办法从另一个工作簿中分配全局变量?
在过去,我看过几个stackoverflow线程,例如,更改变量的作用域、私有、公共、全局等,激活工作簿,查看Excel当前隐藏的名称空间。
Sub Proc()
MsgBox "The magic number is: 5"
End Sub
file.xlsm中的Sheet1
Call CopyModule("patcher_b_progress_bar.xlsm", "file_b.xlsm", "Sheet1", True)
Call CopyModule("patcher_b_progress_bar.xlsm", "file_b.xlsm", "GlobalModule", True)
Application.Run ("'file_b.xlsm'!GlobalModule.setDefaultMagicNumber")
patcher.xlsm通过模块“修补”工作表1并设置一个幻数
CopyModule
' export "patched GlobalModule" from patcher.xlsm as temp.bas
' remove GlobalModule from file.xlsm
' re-import "patched GlobalModule" to file.xlsm
(too lengthy to post here, referenced from http://www.cpearson.com/excel/vbe.aspx)
patcher.xlsm的CopyModule
Option Explicit
Private MAGIC_NUMBER As Integer
Public Function getMagicNumber() As Integer
getMagicNumber = MAGIC_NUMBER
End Function
Public Function setDefaultMagicNumber() As Integer
MAGIC_NUMBER = 7
setDefaultMagicNumber= getMagicNumber()
End Function
patcher.xlsm的GlobalModule
Sub Proc()
If GlobalModule.getMagicNumber= 7 Then
MsgBox "Magic number is correct: " & GlobalModule.getMagicNumber
Else
MsgBox "Magic number is wrong: " & GlobalModule.getMagicNumber
End If
End Sub
Sheet1 of patcher.xlsm (将覆盖到file.xlsm)
编辑:我已经修改了这个问题。即使行"GlobalModule.setDefaultMagicNumber“被成功执行,变量MAGIC_NUMBER似乎也被重新初始化为"0”。
https://stackoverflow.com/questions/56662806
复制相似问题