首页 > 解决方案 > VBA 全局声明

问题描述

这是一个非常幼稚的问题,我猜。我有一些全局变量

Dim foo, bar as Double

然后将其设置为:

Sub setter()
   foo = 3.14
   bar = 2.718
End Sub

我希望在启动时初始化变量,我收集到可以用

 Private Sub Auto_open()
     Call setter
 End Sub

问题是:这会拿起声明,还是我需要做一些其他的魔法?

标签: excelvba

解决方案


Dim不能用于声明全局变量。用于Dim在过程范围内声明局部变量。

在模块级别使用时,Dim等效于Private,您应该Private改为使用,以保持一致性(Private对抗PublicDim这样做更清楚)。

Dim foo, bar as Double

请注意,这会产生bar一个Double, 并留下foo一个隐含的Variant。如果两者都是Double,则声明应如下所示:

Dim foo As Double, bar As Double

我建议每个语句声明一个变量。

Dim foo As Double
Dim bar As Double

以这种方式维护要容易得多。

至于你的问题,假设一切都在同一个模块中,你很好 - 变量不需要是全局的(Public- 也有一个Global关键字,但你只能在标准模块中使用它,它在功能上是相同的to Public,所以不要使用Global,它已经过时了),因为没有其他模块需要访问它们。

请注意,您需要全局变量是非常、非常、非常罕见的。大多数时候,您将在过程之间传递参数。


推荐阅读