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