首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何通过激活另一个工作簿中的宏来更改工作簿的全局变量

如何通过激活另一个工作簿中的宏来更改工作簿的全局变量
EN

Stack Overflow用户
提问于 2019-06-19 16:01:39
回答 1查看 176关注 0票数 3

我有两个excel文件,一个是patcher.xlsm,一个是file.xlsm。在file.xlsm上有一个按钮,当它点击时,它会执行工作表1上的一个带有消息框的过程:神奇的数字是: 5。

现在,我有了一个patcher.xlsm,它将重新导入一个打了补丁的工作表1和一个带有全局变量的标准模块,并在file.xlsm上运行一个宏,将这个数字设置为7。预期的结果是,单击file.xlsm的用户现在会看到神奇的数字是: 7。

由于某些原因,每当我执行patcher.xlsm,时,幻数总是被重置为0,就好像内存已被清除或项目重置一样。

有没有办法从另一个工作簿中分配全局变量?

在过去,我看过几个stackoverflow线程,例如,更改变量的作用域、私有、公共、全局等,激活工作簿,查看Excel当前隐藏的名称空间。

代码语言:javascript
复制
Sub Proc()
  MsgBox "The magic number is: 5"
End Sub

file.xlsm中的Sheet1

代码语言:javascript
复制
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并设置一个幻数

代码语言:javascript
复制
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.xlsmCopyModule

代码语言:javascript
复制
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.xlsmGlobalModule

代码语言:javascript
复制
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”。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56662806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档