字典查找失败

时间:2017-06-21 16:06:32

标签: excel dictionary

我正在编写一个Excel VBA程序,用于验证学校课程安排。关键组件是全局字典对象,用于跟踪课程编号(密钥)和课程安排的次数(项目)。我已经成功创建并加载了字典。我试图查找与课程键相关联的值,但是使用我在此站点找到的单行示例无法这样做。我想使用这行代码:

intCourseCnt = gdicCourses(" BAAC 100")

intCourseCnt = gdicCourses.Item(" BAAC 100")

但是没有工作(实际上," BAAC 100"部分是一个字符串变量,但如果我硬编码课程,它甚至无法工作。)相反,我必须使用kludgy循环代码下面查找课程计数:

Private Function Check_Course_Dup_Helper(strCourse As String) As Boolean
    Dim k As Variant
    Check_Course_Dup_Helper = False
    ' Read thru dictionary. Look to see if only 1 occurrence then jump out.
    For Each k In gdicCourses.Keys
        If k = strCourse Then
            If gdicCourses.Item(k) = 1 Then
                Check_Course_Dup_Helper = True
                Exit Function
            End If
            Exit Function
        End If
     Next
End Function

有没有办法重写这个,以便我可以在没有循环的情况下查找项值?

谢谢。

1 个答案:

答案 0 :(得分:0)

感谢您的快速回复。答案如下:

大卫,程序运行时的 gdicCourses(" BAAC 100")代码值是"空"这使接收变量等于0.如果我使用strCourse变量,结果是相同的。此外,字典填充代码如下所示。我不相信这是一个问题,因为我可以正确地访问程序中其他地方的值,其中使用了使用范围变量的For-Each-Next循环。不存在空格和不可打印字符。  我的猜测是我需要使用一个范围来引用字典中的位置而不是字符串。我已经尝试了几乎所有我想到的组合,但价值仍然是空的"。

Set gdicCourses = New Scripting.Dictionary
For Each c In Worksheets("Tables").Range("combined_courses").Cells
    If Not (gdicCourses.Exists(c)) Then
        gdicCourses.Add c, (Application.WorksheetFunction.CountIF(Range("MWF_Table_Full"), c
                           (Application.WorksheetFunction.CountIf(Range("TTh_Table_Full"), c)))
    End If
Next