VBA Excel全局数组没有保留值
我是新来的stackoverflow和目前真正需要帮助。
我打了几天的一系列string,我声明为公共或私人模块。
Public unitTypes(1 To 3, 1 To 4) As String
在我的第一个Sub中,我写了几个string到这个数组中。
Public Sub WriteBoxes() [...] unitTypes(1, 1) = "Durchschnitt" unitTypes(2, 1) = "avg" unitTypes(1, 2) = "Maximum" unitTypes(2, 2) = "max" [...]
如果我通过MsgBox在Sub的末尾testing它,所有的string仍然在数组中。
Public Sub DeleteData() [...] MsgBox unitTypes(1, 2) [...]
但是,如果我想读取在同一模块中的另一个子string中的任何string都将丢失,我只是有一个空(“”)数组。
有谁能告诉我我错过了什么?
Daniel提前感谢您的帮助
根据我的经验,每次代码执行都停止(单击“重置”,发生错误时接受“结束”,工作簿closures,…),可变数据将丢失。 为了避免这种情况,我使用caching中的常量或属性:
例:
Public Property Get Var Static sVar, inited as Boolean If Not inited then sVar = "something" inited = True End If Var = sVar End Property
这样,每次尝试访问unitType时,属性都会填充数据或返回caching的数据。
在你的情况下,作为一个2D数组,你可以使用类似于:
Private pUnitTypes(1 To 3, 1 To 4) As String Public Property Get unitTypes(ByVal i1, ByVal i2) As String Static inited as Boolean If Not inited then pUnitTypes(1, 1) = "Durchschnitt" pUnitTypes(2, 1) = "avg" pUnitTypes(1, 2) = "Maximum" pUnitTypes(2, 2) = "max" '... inited = True End If unitTypes = pUnitTypes(i1, i2) End Property Public Property Let unitTypes(ByVal i1, ByVal i2, ByVal Value As String) 'Force call to property Get to ensure array is populated Dim dummy as String dummy = unitTypes(i1, i2) punitTypes(i1,i2) = Value End Property
当然,当访问unitType(1,2)
你正在访问一个String函数,而不是一个数组,但是它在你的代码使用中可能是透明的。
(你是否先打电话给你的WriteBoxes?)一个适合我的小testing:
Public unitTypes(1 To 3, 1 To 4) As String Sub WriteBoxes() unitTypes(1, 1) = "Durchschnitt" unitTypes(1, 2) = "avg" End Sub Sub test2() Call WriteBoxes MsgBox (unitTypes(1, 1)) MsgBox (unitTypes(1, 2)) End Sub