AW: Typen unverträglich IF Bedingung
05.01.2018 11:16:48
Werner
Hallo Lia,
beschreib doch mal, was du genau machen willst.
Im Moment läuft der Code von der letzten Zeile zur ersten Zeile. In der jeweiligen Zeile wird geprüft, ob in F "ende" steht und ob im Bereich E2 bis E2000 irgendwo ein Eintrag vorhanden ist. Sind beide Bedingungen erfüllt, wird die aktuelle Zeile ins Blatt 2 kopiert und anschließend gelöscht.
Code dazu:
Public Sub Test()
Dim ZeileMax As Long, Zeile As Long
With Tabelle1
ZeileMax = .UsedRange.Rows.Count
For Zeile = ZeileMax To 1 Step -1
If .Cells(Zeile, 6).Value = "ende" And Application.CountA(.Range("E2:E1000")) > 0 Then
.Rows(Zeile).Copy Destination:=Tabelle2.Cells(Rows.Count, 1).End(xlUp).Offset(1)
.Rows(Zeile).Delete
End If
Next Zeile
End With
End Sub
Ich vermute aber, daß du was ganz anderes erreichen/prüfen willst. Kann es sein, dass du zunächst prüfen willst, ob in der aktuellen Zeile in Spalte F "ende" steht und ob in der gleichen Zeile in Spalte E ein Eintrag vorhanden ist? Wenn ja, dann wird das so nämlich nichts.
Code für die zweite Version:
Public Sub Test()
Dim ZeileMax As Long, Zeile As Long
With Tabelle1
ZeileMax = .UsedRange.Rows.Count
For Zeile = ZeileMax To 1 Step -1
If .Cells(Zeile, 6).Value = "ende" And .Cells(Zeile, 5) "" Then
.Rows(Zeile).Copy Destination:=Tabelle2.Cells(Rows.Count, 1).End(xlUp).Offset(1)
.Rows(Zeile).Delete
End If
Next Zeile
End With
End Sub
Bei deinem geposteten Code fehlte jeweils ein Punkt von Cells (.Cells) und vor Range (.Range).
Zur Erklärung:
Du mußt Excel schon sagen, auf welchem Blatt sich die Range-Objekte (Cells, Range) befinden, die du ansprechen willst. Entweder durch davorstellen des Tabellenblattes
Tabelle1.Range(Tabelle1.Cells(1, 1), .Tabelle1.Cells(1, 4))
Da das aber von der schreibweise her unhandlich ist, kann man sich mit einer With - End With Klammer (wie in deinem Beispiel) behelfen.
Hier muss dann aber zwingend vor jedes Range-Objekt ein Punkt, damit korrekt auf des im With angegebene Tabellenblatt refereniziert wird.
Beispiel von oben mit With:
With Tabelle1
.Range(.Cells(1, 1), .Cells(1, 4))
End With
Gruß Werner