Excel 用值定义跨模块变量
我正在开发一系列Excel宏,让我的生活更轻松。不同宏的一部分是将图片插入图纸。因此,我希望将图像的路径保存在全局位置,然后通过变量访问它(这样,如果每个宏发生更改,我就不必手动调整路径)。我每个宏使用一个模块 在我自己的模块“变量”中,我将一个变量定义为Public或Global,然后通过一个子模块分配一个值。如果我现在通过另一个模块访问这个变量,我会得到一个空的MsgBox。 出于测试目的,我使用希望通过MsgBox显示的字符串 模块1:Excel 用值定义跨模块变量,excel,vba,Excel,Vba,我正在开发一系列Excel宏,让我的生活更轻松。不同宏的一部分是将图片插入图纸。因此,我希望将图像的路径保存在全局位置,然后通过变量访问它(这样,如果每个宏发生更改,我就不必手动调整路径)。我每个宏使用一个模块 在我自己的模块“变量”中,我将一个变量定义为Public或Global,然后通过一个子模块分配一个值。如果我现在通过另一个模块访问这个变量,我会得到一个空的MsgBox。 出于测试目的,我使用希望通过MsgBox显示的字符串 模块1: Public test As String Sub
Public test As String
Sub variablen()
test = "String for Test "
End Sub
模块2:
Public Sub testpublic()
MsgBox (test)
End Sub
我建议使用常量而不是变量: 模块1
Option Explicit
Public Const MyPath As String = "C:\Temp"
模块2
Option Explicit
Public Sub ShowPath()
MsgBox MyPath
End Sub
我还建议激活选项显式
:在VBA编辑器中,转到工具›选项›
如果您像以前那样执行此操作,
test
将为空,直到通过首先运行过程variablen
初始化它。如果使用Public Const
则无需初始化
这样,如果每个宏发生更改,我就不必手动调整其路径
如果它需要更改,那么它在语义上就不是一个Const
。编写不需要经常修改的代码的关键是将代码与数据分开
有时需要更改的文件路径可以看作是某种配置设置
有一个模块,可以从任何地方读取设置,并返回给定某个键的设置值
设置本身可以存在于(隐藏的?)工作表中,位于列表对象
表中,具有键
和值
列,并使用索引
+匹配
函数进行查找(使用早期绑定的工作表函数
函数将在给定不存在的键字符串时引发运行时错误):
变量
将保留值
的子类型,因此对于字符串
值,您将获得一个变量/字符串
;对于日期
值,您将获得变量/日期
;对于数值,您将获得变量/双精度
;对于真/假值,您将获得变量/布尔值
现在,当文件路径需要更改时,您的代码不会:
Dim path As String
path = GetSettingValue("ImageFolderPath")
如果您需要更多设置,您也没有要添加的代码:
Dim otherThing As String
otherThing = GetSettingValue("OtherThing")
您所需要做的就是确保所使用的字符串键与
设置表中键
列的内容相匹配
它正在工作-您必须通过运行“variablen”子模块来设置测试变量值,然后“testpublic”子模块按预期工作。如果只运行testpublic,则测试变量为空。但是下面的解决方案比在Sub中设置变量值要好。谢谢,这正是我想要的。
Dim otherThing As String
otherThing = GetSettingValue("OtherThing")