2014-11-19 5 views
-1

사람들이 작업을 할당 받고 진행 추적 프로그램으로 시트를 사용할 수있는 작업 목록 스타일 Excel 시트를 만듭니다.Excel VBA - 런타임 오류 13 형식 불일치

작업이 완료되면 완료된 것으로 사람이 표시하고 시트에 변경 참조 번호가 필요한지 묻는 메시지 상자가 나타납니다.

그러나 작업을 완료 한 사람을 필터링하고 새 작업에 새 행을 추가하려고하면 런타임 오류 13 유형 불일치가 발생합니다. 내 VBA가 작업 완료 상태를 지속적으로 확인하기 때문에 빈 행을 만들 때 상태 열에 아무 것도 없기 때문에 생각합니다.

다음은 오류 메시지와 함께 강조 표시된 코드입니다.

Private Sub Worksheet_Change(ByVal Target As Excel.Range) 
    Dim answer 
    If Not Intersect(Target, Range("H5:H1000")) Is Nothing Then 
     If (Target.Value) = "Completed" Then 
      answer = MsgBox("Do you need to add a change reference?", vbYesNo + vbQuestion, "Change  Reference Reminder") 
      If answer = vbYes Then 
       MsgBox "Add in the column to the right", , ("Change Reference Tip") 
      Else 
       'do nothing' 
      End If 
     End If 
    End If 
End Sub 
+1

'Active.Sheet'? 그게 무슨 뜻이야? 그리고 VBA는 문제가 발생한 줄 번호를 메모리에서 알려줘야합니다. – paxdiablo

+0

아무런 조치가 필요없는 명령 ^^ – Synoon

+0

추가 행을 추가하는 시점은 언제입니까? – kaybee99

답변

1

여기에 몇 가지 사항이 있습니다. 댓글에 설명하기에는 너무 많습니다. 하나 개 이상의 세포의 내용이 변경되면 모든

  1. 첫째는 Worksheet_Change 시트 매크로 특히, 이벤트에 의해 트리거된다. 행을 삽입 할 때 (많은 셀의 값을 연속적으로 변경하는) 과중한 처리를 피하려면 Target이 단일 셀 이상인 경우 쫓아 내야합니다. 일반적으로 첫 번째 줄로 If Target.cells.count > 1 then exit sub을 포함하면이 작업을 수행하기에 충분합니다. 이는 변경된 단일 셀의 값을 완료된 값인과 비교하려고 할 때 특히 중요합니다.
  2. 제공된 코드는 실제로 아무 것도 변경하지 않지만 의도 한대로 보입니다. 셀의 값을 변경해도 같은 Worksheet_Change 이벤트 maco의 두 번째 반복을 시작하지 않으려면 (이후 자체적으로 실행하려고 시도 함) 일시적으로 이벤트 처리를 중단하고 매크로를 종료하기 직전에 다시 시작하십시오.
  3. 이벤트를 끄면 오류가 발생했을 때 다시 켜도록 오류 처리가 필요합니다. 최상의 작성 코드 프로 시저에 오류가 발생할 수 있으며 오류를 catch하여 직접 실행 창과 같은 위치로보고 한 다음 안전하게 이벤트 매크로를 종료하기 전에 이벤트 처리를 다시 시작하십시오.
  4. 사소한 점이지만 내 부울 조건이 실제로 그것을 사용하게 될 때까지 변수가 Dim이 아닙니다. 나는 오른쪽에있는 셀에 하나 개의 컬럼에 사용자를 이동 한 줄의 코드를 추가 한

    Option Explicit 
    
    Private Sub Worksheet_Change(ByVal Target As Excel.Range) 
        If Target.Cells.Count > 1 Then Exit Sub 
        If Not Intersect(Target, Range("H5:H1000")) Is Nothing Then 
         On Error GoTo Erreur 
         Application.EnableEvents = False 
         If LCase(Target.Value) = "completed" Then 
          Dim answer As Variant 
          answer = MsgBox("Do you need to add a change reference?", vbYesNo + vbQuestion, "Change  Reference Reminder") 
          If answer = vbYes Then 
           MsgBox "Change references are added in the column to the right." _ 
            & Chr(10) & Chr(10) & "Let's go there now.", vbOKOnly, "Change Re ference Tip" 
           Target.Offset(0, 1).Activate 
          Else 
           'do nothing' 
          End If 
         End If 
        End If 
        GoTo Fìn 
    Erreur: 
        Debug.Print Err 
    Fìn: 
        Application.EnableEvents = True 
    End Sub 
    

    마음에 이러한 3.5 것들로

, 제공되는 샘플 코드로 더 좋을 수도, 이벤트를 방아쇠 한 셀