我正在编写一个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
有没有办法重写这个,以便我可以在没有循环的情况下查找项值?
谢谢。
答案 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