在Excel VBA中使用“字典”时,我似乎遇到了一个严重的数据完整性问题,该问题在我的代码中广泛使用。我有一个例程,在该例程中,我使用词典从优化例程中捕获最佳结果。捕获后,我将使用计算结果更新现有数据表,其中零值会导致错误。该例程在过去已被广泛使用,没有错误。因此,当错误开始发生时,我感到很惊讶。我将错误跟踪到看起来是在实际代码之外损坏了Dictionary的数据。
带有错误的词典由另一个词典加载,该词典不断寻找更新,并且仅保留比以前更好的值,从而进行优化。一旦捕获了这些值,导致错误的Dictionary(DataItems)会将新值一次加载到一个数据表中。这是我用来捕获错误的代码:
If KeyCount <> DataItems.Count Then: Stop
NewValue = DataItems(NewData)
If KeyCount <> DataItems.Count Then: Stop
在将数据读入NewValue变量之前,我捕获了DataItems中的Items数量。在读取数据之前,Dictionary的计数为1,但在读取数据后,计数为2。原始键成为项值为零的新记录的键,原始项获得了一个新键,该键在被扫描的原始批量数据中似乎是一个值。在DataItems词典中,似乎只有一条记录几乎总是发生这种情况。
我可以与其他调用应用程序一起使用同一例程,而完全没有问题,因此问题似乎与调用应用程序相关,这没有任何意义,因为所使用的字典源自发生错误的例程。我试图通过逐步执行代码和其他调试操作来消除潜在的计时问题,但我仍然感到非常困惑。确实,这使我怀疑在Excel中对应用程序关键数据使用字典时的潜在数据完整性。任何见解将不胜感激。
答案 0 :(得分:2)
我猜想您在调试时正在使用“监视”窗口和/或“即时”窗格,这就是导致问题的原因(或者至少使情况更糟)...如果添加诸如{{ 1}}到“监视”列表,然后在代码暂停时,该监视实际上会添加该键(如果不存在)。
类似地,如果暂停时您在“即时”窗口中执行类似DataItems("keyHere")
的操作,则不会看到任何输出,但是该键将被静默创建。
说明:
? DataItems("thisKeyDoesNotExist")