Vba Excel 全局数组未保留值



我是stackoverflow的新手,目前确实需要帮助。

我几天以来就与一系列字符串战斗,我在模块中宣布为公共或私人。

Public unitTypes(1 To 3, 1 To 4) As String

在我的第一个子中,我在那个特定模块中我将几个字符串写入该数组。

Public Sub WriteBoxes()
[...]
unitTypes(1, 1) = "Durchschnitt"
unitTypes(2, 1) = "avg"
unitTypes(1, 2) = "Maximum"
unitTypes(2, 2) = "max"
[...]

如果我通过子末端的MSGBox对其进行测试,则所有字符串仍在数组中。

Public Sub DeleteData()
[...]
MsgBox unitTypes(1, 2)
[...]

但是,如果我想在同一模块中的另一个子中读取任何字符串,则丢失了字符串,我只有一个空的(")阵列。

有人可以告诉我我想念什么吗?

感谢您提前的帮助,丹尼尔

从我的经验中,每次执行代码执行时(单击重置,在发生错误时接受结束,关闭工作簿,...),丢失可变数据。为避免这种情况,我使用具有缓存的常数或属性:

示例:

Public Property Get Var
     Static sVar, inited as Boolean
     If Not inited then
         sVar = "something"
         inited = True
     End If
     Var = sVar
End Property

这样,每当您尝试访问Unittypes时,属性都会填充数据或返回缓存的数据。

在您的情况下,是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)时,您要添加一个字符串函数,而不是数组,但在您的代码使用情况下可能是透明的。

(您首先调用写箱吗?)一个对我有用的小测试:

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

相关内容

  • 没有找到相关文章

最新更新