1

我有一个奇怪的问题。我是 Access 和 VBA 的新手,所以这可能是一个愚蠢的错误。

Private backColorCycle As Integer
Private doneRows As New Dictionary


Private Sub AlternateGroupColor()
    If Not doneRows.Exists(Me.JCH_Shape) Then
        '... some stuff that assigns a value to backColorCycle
    Else
        '... some stuff that assigns a value to backColorCycle
    End If

    doneRows.Item(Me.JCH_Shape) = backColorCycle


    Detail.BackColor = QBColor(doneRows.Item(Me.JCH_Shape))
    GroupHeader0.BackColor = QBColor(doneRows.Item(Me.JCH_Shape))
End Sub

AlternateGroupColor() 是重复调用的事件处理程序(由 Access 中的 OnFormat 事件)。Me.JCH_Shape 是一个字符串,在一组值中循环两次:调用函数时可能是 A、B、C、A、B、C,所以我想知道何时已经遇到了一个值。我希望通过将值存储在 doneRows 中并检查该值是否已经存在来确定这一点。但是,即使我检查过 Me.JCH_Shape 确实有不同的值,并且 doneRows.Item(Me.JCH_Shape) 确实返回了我在函数末尾期望的值,但 doneRows.Count 永远不会大于 1。看起来好像每次调用子目录时我对字典所做的更改都会重置,我不知道为什么。感觉像是范围问题,但我不能

任何帮助,将不胜感激。谢谢。

4

1 回答 1

0

ADictionary允许对象作为它的键。Me.JCH_Shape是您报告中的一个对象,所以当您这样做时

doneRows.Item(Me.JCH_Shape) = backColorCycle

您反复将值重新分配给Dictionary其键是Me.JCH_Shape 对象本身的条目。如果要根据需要使用的对象Dictionary的当前值存储项目Me.JCH_Shape

doneRows.Item(Me.JCH_Shape.Value) = backColorCycle
于 2013-06-13T19:23:28.437 回答