gpt4 book ai didi

arrays - Vba Excel全局数组没有保留值

转载 作者:行者123 更新时间:2023-12-03 00:50:34 24 4
gpt4 key购买 nike

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

几天来我一直在与一系列字符串进行斗争,我在模块中将其声明为公共(public)甚至私有(private)。

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

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

Public Sub WriteBoxes()
[...]

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

如果我通过 Sub 末尾的 MsgBox 进行测试,所有字符串仍然在数组中。

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

但是,如果我想读取同一模块中另一个 Sub 中的任何字符串,则字符串会丢失,并且我只有一个空(“”)数组。

谁能告诉我我错过了什么?

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

最佳答案

根据我的经验,每次停止代码执行(单击“重置”、发生错误时接受“结束”、关闭工作簿等),变量数据都会丢失。为了避免这种情况,我使用带有缓存的常量或属性:

示例:

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

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

在你的情况下,作为一个二维数组,你可以使用类似的东西:

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) 时,您访问的是一个字符串函数,而不是一个数组,但它在您的代码使用中可能是透明的。

关于arrays - Vba Excel全局数组没有保留值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41279638/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com