2016-12-29 11 views
0

Ich habe ein Makro, das wie folgt lautet:Laufzeitfehler 13 mehrere Zeilen in Excel auf Löschen VBA

Dim oval 

Public Sub Worksheet_SelectionChange(ByVal Target As Range) 
If Target.Value = Null Then Exit Sub 

Application.EnableEvents = False 
oval = Target.Value 
MsgBox Target.Count 

Application.EnableEvents = True 
End Sub 

Wenn ich das laufen folgende Makro und wenn ich mehrere Zeilen markieren und dann löschen, es wirft der Fehler unten. Es passiert nur für mehrere Zeilen. Ich habe auch versucht, eine Bedingung hinzuzufügen, die sagt: If Target.Count> 1 Then Exit Sub und das schien es auch nicht zu beheben.

Microsoft Visual Basic 

Run-time error '13': 

Type mismatch 
+0

Versuchen Sie ersetzen 'Null' mit' vbNullString' – Moacir

+0

es versucht. Funktioniert nicht. – p0tta

Antwort

2

Target.Value ist ein Array, wenn Sie mehrere Zellen auswählen, so dass Sie es den Wert des ersten Elements Um nicht überprüfen kann „Wert“ überprüfen Sie so etwas wie (zum Testen) tun könnte:

Debug.Print Target.Value()(1,1) 

Sie können dies mit IsArray überprüfen, und wenn Sie wollen, nur am Ende, wenn es ein Array dann

If IsArray(Target.Value) Then Exit Sub 

es sieht aus wie Sie die Zählung wollen, obwohl so vielleicht so etwas wie:

Dim oval 

Public Sub Worksheet_SelectionChange(ByVal Target As Range) 
If Target.Count > 1 Then 
    MsgBox Target.Count 
Else 
    If Target.Value = vbNullString Then Exit Sub 
    oval = Target.Value 
    MsgBox Target.Count 
End If 
End Sub 

obwohl ich sicher bin, dass du etwas mit Oval machen willst ... Das überlasse ich dir aber.

+1

Nicht sicher, was die Absicht seines Codes ist, aber einfach 'If Target.Count> 1 ... 'könnte den Trick tun, nur ein bisschen einfacher. – Porcupine911

+0

zustimmen ... bearbeitet – NikT

+0

Das hat für mich funktioniert. Vielen Dank! – p0tta

1

Ändern Sie Ihren Code von Worksheet_SelectionChange Ereignis zu Worksheet_Change Ereignis.

Auch mehrere Zellen werden nur einmal gelöscht, wenn Sie mehrere Zellen löschen, so dass die zweite If Target.Value = "" Then Exit Sub nicht benötigt wird. Es sei denn, Sie möchten nicht oval einen "leeren" Wert haben.

-Code

Dim oval 

Public Sub Worksheet_Change(ByVal Target As Range) 

If Target.Count > 1 Then Exit Sub 

' this line might be redundant 
'If Target.Value = "" Then Exit Sub 

Application.EnableEvents = False  
oval = Target.Value  

Application.EnableEvents = True 

End Sub 
+0

Ich musste sowohl die SelectionChange als auch die Change Events verwenden, aber das war auch eine gute Lösung. Vielen Dank. – p0tta

Verwandte Themen