Vba 全局(在模块内)声明和定义变量?

Vba 全局(在模块内)声明和定义变量?,vba,excel,Vba,Excel,我有一个模块(“Module1”),它有几个宏。其中一些是我背靠背运行的(它将代码长度拆分,使调试/故障排除变得更容易)。在该模块的顶部,我有: Option explicit Dim addressFileName as String Sub noOne() addressFileName = "C:\Batman.xslx" End Sub Sub noTwo() msgbox("You want to use the file " & addressFileName) End

我有一个模块(“Module1”),它有几个宏。其中一些是我背靠背运行的(它将代码长度拆分,使调试/故障排除变得更容易)。在该模块的顶部,我有:

Option explicit
Dim addressFileName as String

Sub noOne()
addressFileName = "C:\Batman.xslx"
End Sub

Sub noTwo()
msgbox("You want to use the file " & addressFileName)
End Sub
如果我不运行一个()然后不运行两个(),效果很好。但是,如果我必须在subTwo()中调试并重新启动宏,它将无法识别“addressFileName”

是否有一种方法可以定义全球使用的
addressFileName
?只需在声明无效后添加
addressFileName=“C:\Batman.xslx
(“编译错误:无效的外部过程”)

这是可能的吗?或者可能有一些解决办法?或者有一个很好的理由你不能这样做(如果是这样,我很想知道!)。谢谢你的任何想法

有没有一种方法可以定义要全局使用的addressFileName

使用


请注意,您将无法更改字符串,但它可以从项目中的任何位置引用。这需要位于模块工作表的顶部,而不是工作表代码工作表的顶部。有关详细信息,请参阅。

谢谢Jeeped!就是这样。使用全局常量而不是在每个宏中声明它们有什么大的缺点吗?Quick q问题:如果我全局定义它,那么在sub noTwo()中将其更改为
addressFileName=“C:\Superman”
,它将恢复为全局定义(C:\Batman)还是保留为最新的声明(“C:\Superman”)?请注意,您将无法更改字符串。它不会恢复,因为您无法将其更改为开始。我对许多常用字符串使用全局变量;我会想到基本URL。缺点是您将无法更改字符串。
Const
是常量的缩写,如果您可以更改它,var将不会是常量。bonu是的,是的,现在我记得C语言中的
const
。非常感谢!很高兴你很快就解决了。就你以前的情况而言,你可以从noTwo(在msgbox之前)中调用noOne,这将满足调试器的要求。
public const addressFileName as string  = "C:\Batman.xslx"