class - VBA:字典内存问题?填充 dict、.removeall、填充问题

标签 class vba object excel dictionary

所以我在这里使用了一些代码,我使用一个字典来填充两个不同的字典,这些字典作为自定义类中的属性保存。我这样做是为了提高效率。

注意:我通过为要设置的每个属性使用字典来解决此问题,但这并不太有效。

所以大致这是我的代码:

for iKey = 1 to class.maxnumber ' 8
    dTempDict.add iKey, cdbl(24)   ' enforce to 24 for calcs later
next iKey

Set class.dict1 = dTempDict ' commit to class.dict1

dTempDict.removeall 'wipe temp dictionary

for iKey = 1 to class.maxnumber ' 8
    dTempDict.add iKey, "word"   ' something other than 24 to test
next iKey

Set class.dict2 = dTempDict

所以上面的工作正常。然后我尝试循环并打印 class.dict1 的键没有问题。然后,当我尝试将值分配给预先声明的 dbl 时,我遇到了麻烦。然后我在不同的子传递类byref中循环遍历每个键:
dim dTempDict as scripting.dictionary
Set dTempDict = class.dict1 
for each iKey in dTempDict
 msgbox typename(dTempDict.Item(iKey))
next iKey

这带来了结果......“字符串”......令人困惑。然后我将我的值持有者更改为一个字符串并且它起作用了。我已经检查了类中的访问器,并且它们没有循环回错误的字典属性,因此看起来即使我将它们分配到第二个甚至执行了 .removeall,我的第二个字典的值也会填充到第一个字典中。

有任何想法吗?

如上所述,对 class.dict1 和 class.dict2 使用不同的临时字典,它们被正确分配,但这仍然令人困惑。

最佳答案

当你这样做...

Set class.dict1 = dTempDict 
dTempDict.removeall 
'...
Set class.dict2 = dTempDict

... 然后两个 dict1dict2指向同一个 Dictionary 对象(dTempDict)。

将一个对象变量分配给另一个对象变量不会创建该对象的副本,而只会导致指向同一对象的附加“指针”。

您应该创建一个新的字典而不是重复使用相同的字典来分配给 dict2 .

关于class - VBA:字典内存问题?填充 dict、.removeall、填充问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15141872/

相关文章:

c++ - 调用扩展类函数

php - 通过对象属性运行循环并赋值

java - 将对象传递给 fragment Activity 并从 fragment 写入对象的正确方法

不能子类化的 JavaScript 类

c++ - 如何分配 '-' 等于 ' ' 进行字符串类比较,这可能吗?

vba - Access 2016 超出系统资源

vba - 如何使 Excel 单元格等于空(可能通过 VBA 代码)

arrays - 将非常大的一维数组写入工作表

PHP 值对象自动创建

PHP fatal error : Call to a member function . .. 在非对象上:区分大小写