2016-06-15 12 views
1

Ich habe diese Sub, die den Wert einer Zelle aktualisieren sollte, wenn eine entsprechende Zelle geändert wird, aber ich bekomme immer einen Fehler, der Fehler 13 Typ Mismatch, ive nachschlagen alle möglichen Quellen dieses Problem und kann nicht herausfinden, was es verursacht, hier ist mein Code, der das Problem präsentiert:Exceltyp Mismatch-Fehler auf einem privaten Sub

Private Sub Worksheet_Change(ByVal Target As range) 
'Adds unique keyA values 
'Check to see if the changed cell is in column H 
    If Not Intersect(Target, range("H:H")) Is Nothing Then 

     If Target.Cells.Value <> "" And Target.Row > 7 And Target.Row <= 20 Then 

'Update the "KeyA" value 
      range("A" & Target.Row).Value = Now() 

     End If 

    End If 
'Adds unique keyB values 
'Check to see if the changed cell is in column J 
    If Not Intersect(Target, range("J:J")) Is Nothing Then 

     If Target.Cells.Value <> "" And (Target.Row > "7" And Target.Row <= "27") Then 

'Update the "KeyB" value 
      range("M" & Target.Row).Value = Now() 

     End If 

    End If 

End Sub 

der Fehler tritt auf, wenn ich versuche, den Bereich seiner Prüfung auf Veränderung zu löschen. jede Hilfe bei der Ausarbeitung wäre sehr dankbar, danke!

+0

Was? Wenn Sie etwas in der Spalte H oder J auf dem Blatt löschen, erhalten Sie den Fehler? – Raystafarian

+0

genau, ive ging sogar so weit wie in dem Code, der es löscht, um jede einzelne Zelle zu benennen und ihren Wert einzustellen = "" – Vbasic4now

+1

Was ist 'If Not IsEmpty (Target)' – Raystafarian

Antwort

2

Sie vergessen, dass Target ein Bereich ist und nicht unbedingt nur aus einer Zelle besteht. Wenn Sie Ihren Code ein bisschen anpassen sollte es funktionieren:

Option Explicit 

Private Sub Worksheet_Change(ByVal Target As Range) 

Dim cell As Range 

'Adds unique keyA values 
'Check to see if the changed cell is in column H 
If Not Intersect(Target, Range("H:H")) Is Nothing Then 
    For Each cell In Target.Cells 
     If cell.Value <> vbNullString And Target.Row > 7 And Target.Row <= 20 Then 
      'Update the "KeyA" value 
      Range("A" & Target.Row).Value = Now() 
     End If 
    Next cell 
End If 

'Adds unique keyB values 
'Check to see if the changed cell is in column J 
If Not Intersect(Target, Range("J:J")) Is Nothing Then 
    For Each cell In Target.Cells 
     If cell.Value <> vbNullString And (Target.Row > "7" And Target.Row <= "27") Then 
      'Update the "KeyB" value 
      Range("M" & Target.Row).Value = Now() 
     End If 
    Next cell 
End If 

End Sub 

Grundsätzlich ist die Änderung ist, dass es jetzt jede Zelle im Bereich prüft Target und arbeitet, um Ihren Code für jede Zelle in diesem Bereich. Vorher haben Sie (möglicherweise) mehrere Target.Values mit "" verglichen. Das hat nicht funktioniert. Jetzt wird nur eine .Value mit "" verglichen und das sollte es lösen.

+0

was macht die Option explizit in dieser ersten Zeile von Code? – Vbasic4now

+0

wie es funktioniert hat! Danke! – Vbasic4now

+1

Wenn Sie ein Schlüsselwort nicht verstehen, markieren Sie es einfach und drücken Sie dann 'F1'. Dies führt Sie auf die folgende Website: https://msdn.microsoft.com/en-us/library/office/gg278855.aspx Grundsätzlich heißt es, dass alle Variablen in Ihrem Code zuvor deklariert werden müssen (mit "Dim") Sie können verwendet werden. Das ist nur für eine gute Programmierpraxis und der obige Code wird ohne diese Zeile funktionieren. Ich füge es einfach in alle meine Module ein. Sie können es entfernen, wenn Sie möchten. – Ralph

Verwandte Themen