1

私はおそらくある種の異常なことをしようとしていることを知っています。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
4

1 に答える 1

1

この行は問題を引き起こします:

f.Delete

ここで何が起こるかというと、アイテムをコレクションに追加することです (これはオブジェクトなので、参照を操作します)。次に、オブジェクト自体を削除します。これで、削除された/存在しないオブジェクトを指すポインターのコレクションができました。そのため、後で 2467 エラーが発生します。

于 2012-05-01T06:54:07.093 に答える