声明一个非零的全局静态变量

时间:2015-02-09 10:05:30

标签: vba excel-vba excel

我想声明一个静态变量pos,以下代码有效:

Dim pos As Integer

Sub increment()
    MsgBox pos
    pos = pos + 1
end Sub

Sub decrement()
    MsgBox pos
    pos = pos - 1
end Sub

此处的问题是pos始终从0开始。如果我希望它始终从10开始怎么办呢?我尝试了Dim pos As Integer = 10Public pos As Integer = 10,但他们没有编译。

3 个答案:

答案 0 :(得分:0)

您不能在子或函数之外设置整数数据类型的值。把它想象成一个模块。您尝试声明变量的那个区域仅保留用于声明语句。

默认情况下,声明的整数值为0,这就解释了为pos获得0的原因。

我建议您创建一个特定的子,您可以在其中初始化全局变量值的值,并在需要时调用它。

Sub InitGlobalVarVal()
Pos = 0
'And so on
End Sub

答案 1 :(得分:0)

在初始化声明中的值时,VBA不喜欢它。你需要创建一个像

这样的函数
Dim pos As Integer

Function initVal()
    pos = 10
End Function

只要文件打开就需要调用此函数,并且只需要执行一次,因此请使用WorkBook_Open事件调用此函数。在工作簿打开时调用它并将执行一次,从而满足需要。

答案 2 :(得分:0)

  1. 你在那里没有静态变量。您必须将变量声明为Static才能使真正成为静态变量。

    Static pos As Integer
    
  2. 如何初始化变量可能取决于您的用例。如果此代码驻留在标准模块(.bas)中,则只需在使用之前检查零值。

    If pos = 0 Then
        pos = baseValue
    End If
    

    但如果零是有效值,那么可能会出错。将此代码驻留在类(.cls)模块中会更好,它可以在创建类时初始化它的值。

    Private Sub Class_Initialize()
        pos = baseValue
    End Sub
    
  3. 您可以将值保存在工作表的单元格中,例如$ z $ 1000