Excel 用值定义跨模块变量

Excel 用值定义跨模块变量,excel,vba,Excel,Vba,我正在开发一系列Excel宏,让我的生活更轻松。不同宏的一部分是将图片插入图纸。因此,我希望将图像的路径保存在全局位置,然后通过变量访问它(这样,如果每个宏发生更改,我就不必手动调整路径)。我每个宏使用一个模块 在我自己的模块“变量”中,我将一个变量定义为Public或Global,然后通过一个子模块分配一个值。如果我现在通过另一个模块访问这个变量,我会得到一个空的MsgBox。 出于测试目的,我使用希望通过MsgBox显示的字符串 模块1: Public test As String Sub

我正在开发一系列Excel宏,让我的生活更轻松。不同宏的一部分是将图片插入图纸。因此,我希望将图像的路径保存在全局位置,然后通过变量访问它(这样,如果每个宏发生更改,我就不必手动调整路径)。我每个宏使用一个模块

在我自己的模块“变量”中,我将一个变量定义为Public或Global,然后通过一个子模块分配一个值。如果我现在通过另一个模块访问这个变量,我会得到一个空的MsgBox。 出于测试目的,我使用希望通过MsgBox显示的字符串

模块1:

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")