我是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