从Custom Collection复制FormatCondition对象

时间:2012-04-30 23:13:58

标签: ms-access vba access-vba

我知道我可能正在尝试做一些异常的事情。我需要保存(并删除)Controls FormatConditions集合中的所有FormatCondition对象。然后我需要再次将这些相同的FormatCondition对象重新/重新应用回同一个控件。

似乎我可以成功复制它们但是当我尝试从我自己的Collection对象重新应用那些相同的FormatCondition对象时出现错误。我怀疑这里发生的事情是我实际上并没有像我想象的那样在我的SaveAndDelete例程中复制对象。如果是这样的话,我怎样才能实际克隆这些对象,以便在运行f.Delete后它们仍然存在?

Private SavedFC As New Collection

Private Sub SaveAndDeleteFormatConditions(c as Control)
    Dim f As FormatCondition
    For Each f In c.FormatConditions
        SavedFC.Add f
        f.Delete
    Next
End Sub

Private Sub RecreateFormatConditions(c as control)
    Dim i As Integer
    i = 1
    If SavedFC.Count > 0 Then
        Dim f1 As FormatCondition, f2 As FormatCondition
        For Each f1 In SavedFC

            'Error 2467 occurs here: The expression you entered refers to an object that is closed or doesn't exist
            Set f2 = c.FormatConditions.Add(f1.Type, f1.Operator, f1.Expression1, f1.Expression2)
            With f2
                .BackColor = f1.BackColor
                .FontBold = f1.FontBold
                .FontItalic = f1.FontItalic
                .FontUnderline = f1.FontUnderline
                .ForeColor = f1.ForeColor
            End With
            SavedFC(i).Delete
            i = i + 1
        Next
    End If
End Sub

1 个答案:

答案 0 :(得分:1)

此行导致问题:

f.Delete

这里发生的是你将一个项目添加到集合中(它是一个对象,所以你使用引用进行操作)。然后,您删除对象本身。现在,您有一组指针指向已删除/不存在的对象。这就是为什么你以后会收到2467错误的原因。