Excel VBA公共字典对象自动填充?

时间:2018-04-13 19:10:05

标签: excel vba excel-vba

我正在使用2个字典对象,声明为公共bc我需要它们在每个子对象之外保留我使用它们,但由于某种原因它们在我加载之前自动填充。有没有人看到这种行为?

Public itmsSpot As Dictionary, itmsFwd As Dictionary

Public sub runReport()
  Set itmsSpot = New Dictionary
  Set itmsFwd = New Dictionary

  GenData

End Sub

Public Sub GenData
...

GenData循环遍历我的工作簿中的工作表,并根据工作表中的数据填充itmsSpot和/或itmsFwds,但由于某种原因,只要在它开始循环之前进入GenData,它就会在一个或两个中添加值通过表格。

我在调用GenData之前尝试过Set itmsSpot = Nothing,但它并没有完全解决问题。即使我清除了工作表中的数据,它似乎也是从我上次运行它时自动填充的。有关为什么会发生这种情况的任何想法?

谢谢!

1 个答案:

答案 0 :(得分:2)

如果已实例化并填充公共字典,则无需再次实例化第二次运行。将dict设置为新的dict并不是清除键和项目的正确方法。请改用.RemoveAll。

Public itmsSpot As Dictionary, itmsFwd As Dictionary

Public sub runReport()
    if itmsSpot is nothing then Set itmsSpot = New Dictionary
    if itmsFwd is nothing then Set itmsFwd = New Dictionary

    itmsSpot.removeall
    itmsFwd.removeall

    'set comparemode on empty dict if binary compare (default) is not desired
    itmsSpot.comparemode = vbtextcompare
    itmsFwd.comparemode = vbtextcompare

    GenData

End Sub

Public Sub GenData
...