VBA 字典对象如果存在不工作

Posted

技术标签:

【中文标题】VBA 字典对象如果存在不工作【英文标题】:VBA Dictionary Object If Exists Not Working 【发布时间】:2020-08-11 15:45:36 【问题描述】:

我正在将列中的元素与 Excel VBA 中的字典对象 (ProjectList) 进行比较。我正在打印调试窗口的键:

For Each X In ProjectList.Keys
    Debug.Print X, ProjectList(X)
Next X

它会打印一个键“A123”。

我正在使用 Exists 函数来查看“A123”是否在字典中:

X = "A123"

If ProjectList.exists(X) = False Then
    do something
end if

该过程不断到达“做某事”行,就好像它在字典中没有找到 X 一样,即使它显然在其中,因为调试循环会将它打印出来。我在这里做错了什么?任何帮助表示赞赏!

【问题讨论】:

And it prints a key "A123" - 它应该打印两件事。这两件事是什么? 您是如何填充字典的?钥匙是从哪里来的?当您打印到直接寡妇时,您可能会有不显示的不可见字符。 @GSerg 它打印值和索引:“a123 100”。中间有四个空格,但如果我查看 locals 部分中的值,则值中没有空格。我也在修剪单元格值以确保。 @freeflow 我打印了两个值,它们是相同的 @Crash a123A123 不同。 【参考方案1】:

我在填充字典的部分添加了一条修剪语句。

For ThisRow = 2 To LastRow
    ProjectList.Add Key:=Trim(FSht.Cells(ThisRow, 1)), Item:=ThisRow
Next ThisRow

我不知道为什么这会有所帮助,因为电子表格中的值没有空格,本地窗口显示没有空格...我完全不明白为什么这有效但确实有效。

【讨论】:

Key:=FSht.Cells(ThisRow, 1) 添加 Range 对象,而不是值。因此该值不存在。像这样Key:=FSht.Cells(ThisRow, 1).Value 使用 Range 对象的 Value 属性。

以上是关于VBA 字典对象如果存在不工作的主要内容,如果未能解决你的问题,请参考以下文章

VBA字典

VBA 如何批量将单元格复制到另一个工作表中

自从学会了VBA字典,VLOOKUP都不那么香了

如何在Excel VBA中使用字典Dictionary对象

vba字典删除重复

字典说密钥不存在