2012-04-30 11 views
1

私はおそらく異常な何かをしようとしている知っている。すべてのFormatConditionオブジェクトをControls FormatConditionsコレクションから保存(および削除)する必要があります。その後、同じFormatConditionオブジェクトを同じコントロールに再作成/再適用する必要があります。Copy FormatConditionオブジェクトからカスタムコレクション

私はそれらを正常にコピーできますが、自分のコレクションオブジェクトから同じ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

typo。私はそれを修正します。 – HK1

+0

好奇心から逃れて、反復処理中のオブジェクトの 'For'ループ内で削除を行うのはなぜですか?私も同じことをやったことがありますが、潜在的な異常については妄想的になり、ループの後に削除またはNothingに設定する方が好きです。それはあまりにも悪いです。アクセスは '.ClearFormats'と同等のものを持っていないようですが、私は間違っている可能性があります。 – Zairja

答えて

1

この行は、問題が発生します。ここでは何が起こる

f.Delete 

は、コレクションに項目を追加することです(それはオブジェクトであるので、あなたが参照して動作させます)。次に、オブジェクト自体を削除します。今、あなたは、削除された/存在しないオブジェクトを指すポインタのコレクションを持っています。 2467エラーが発生するのはそのためです。

+0

あなたは私の疑惑を確認しました。あなたは私の質問の主要部分に答えることができますか?**その場合、実際にこれらのオブジェクトをクローンしてf.Deleteを実行した後でもそれらを維持できるようにするにはどうすればいいですか?** – HK1

+0

考えられる方法の1つは書式を保持し、それらのコレクションを移入するオブジェクト(クラスモジュール)を分離します。あなたはここからいくつかのアイデアを得ることができます:http://www.di-mgt.com.au/cl_Simple.html –

関連する問題