我知道我可能正在尝试做一些异常的事情。我需要保存(并删除)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
答案 0 :(得分:1)
此行导致问题:
f.Delete
这里发生的是你将一个项目添加到集合中(它是一个对象,所以你使用引用进行操作)。然后,您删除对象本身。现在,您有一组指针指向已删除/不存在的对象。这就是为什么你以后会收到2467错误的原因。