我想声明一个静态变量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 = 10
或Public pos As Integer = 10
,但他们没有编译。
答案 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)
你在那里没有静态变量。您必须将变量声明为Static
才能使真正成为静态变量。
Static pos As Integer
如何初始化变量可能取决于您的用例。如果此代码驻留在标准模块(.bas
)中,则只需在使用之前检查零值。
If pos = 0 Then
pos = baseValue
End If
但如果零是有效值,那么可能会出错。将此代码驻留在类(.cls
)模块中会更好,它可以在创建类时初始化它的值。
Private Sub Class_Initialize()
pos = baseValue
End Sub
您可以将值保存在工作表的单元格中,例如$ z $ 1000