Ms access 从自定义集合复制FormatCondition对象
我知道我可能想做些不正常的事。我需要保存(和删除)控件FormatConditions集合中的所有FormatCondition对象。然后,我需要重新创建/重新应用这些相同的FormatCondition对象到同一个控件 看起来我可以成功地复制它们,但当我尝试从我自己的集合对象重新应用这些相同的FormatCondition对象时,会出现错误。我怀疑这里发生的事情是,我实际上并没有像我想象的那样复制SaveAndDelete例程中的对象。如果是这样的话,我如何才能真正克隆这些对象,使它们在运行f.Delete之后保持不变Ms access 从自定义集合复制FormatCondition对象,ms-access,vba,Ms Access,Vba,我知道我可能想做些不正常的事。我需要保存(和删除)控件FormatConditions集合中的所有FormatCondition对象。然后,我需要重新创建/重新应用这些相同的FormatCondition对象到同一个控件 看起来我可以成功地复制它们,但当我尝试从我自己的集合对象重新应用这些相同的FormatCondition对象时,会出现错误。我怀疑这里发生的事情是,我实际上并没有像我想象的那样复制SaveAndDelete例程中的对象。如果是这样的话,我如何才能真正克隆这些对象,使它们在运行f
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
该行导致以下问题:
f.Delete
这里发生的事情是向集合中添加一个项(它是一个对象,因此使用引用进行操作)。然后,删除对象本身。现在,您有了一组指向已删除/不存在对象的指针。这就是为什么以后会出现2467错误。这一行导致问题:
f.Delete
这里发生的事情是向集合中添加一个项(它是一个对象,因此使用引用进行操作)。然后,删除对象本身。现在,您有了一组指向已删除/不存在对象的指针。这就是为什么以后会出现2467个错误。您刚刚证实了我的怀疑。你能回答我问题的主要部分吗:如果是这样的话,我如何才能真正克隆这些对象,使它们在运行f.Delete后保持不变?一种可能的方法是定义一个单独的对象(类模块)来保存格式化并填充这些格式化的集合。你可以从这里得到一些想法:你刚刚证实了我的怀疑。你能回答我问题的主要部分吗:如果是这样的话,我如何才能真正克隆这些对象,使它们在运行f.Delete后保持不变?一种可能的方法是定义一个单独的对象(类模块)来保存格式化并填充这些格式化的集合。你可以从这里得到一些想法:出于好奇,为什么你选择在你的
For
循环中删除你正在迭代的对象?我也这么做了,但我对潜在的异常情况有点偏执,我更喜欢在循环后删除或设置为无。太糟糕了,Access似乎没有与.ClearFormats
等效的内容,但我可能错了。只是出于好奇,为什么选择在循环中删除您正在迭代的对象的?我也这么做了,但我对潜在的异常情况有点偏执,我更喜欢在循环后删除或设置为无。很糟糕,Access似乎没有与.ClearFormats
等效的版本,但我可能错了。