2012-04-30 3 views
1

아마도 나는 뭔가 비정상적인 일을하려고합니다. Controls FormatConditions 컬렉션에서 모든 FormatCondition 개체를 저장하고 삭제해야합니다. 그리고 나서 나중에 같은 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

오타입니다. 내가 고칠거야. – HK1

+0

호기심에서 벗어나, 반복되는 객체에 대한'For' 루프 내에서 삭제를 선택하는 이유는 무엇입니까? 나는 똑같은 짓을 했었지만 잠재적 인 예외에 대해 편집증에 빠졌고 루프 이후에 'Nothing'을 삭제하거나 설정하는 것을 선호합니다. 그것은 너무 나쁘다. 액세스는'.ClearFormats'와 동등한 것 같지 않지만 틀릴 수도있다. – Zairja

답변

1

이 줄은 문제가 발생합니다

f.Delete 

당신이 컬렉션 (당신이 참조로 작동 그래서, 목적)에 항목을 추가 여기에 발생합니다. 그런 다음 개체 자체를 삭제합니다. 이제 삭제 된/존재하지 않는 객체를 가리키는 포인터 모음이 있습니다. 그래서 2467 오류가 발생합니다.

+0

방금 ​​내 의혹을 확인했습니다. 내 질문의 주요 부분에 대답 할 수 있습니까? ** 그렇다면 실제로 이러한 개체를 복제하여 f.Delete를 실행 한 후에도 유지할 수 있습니까? ** – HK1

+0

가능한 방법 중 하나가 별도의 객체 (클래스 모듈)를 사용하여 서식을 유지하고 그 모음을 채 웁니다. 당신은 여기에서 몇몇 아이디어를 얻을 수있다 : http://www.di-mgt.com.au/cl_Simple.html –

관련 문제