Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1480to1484
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Zeilen bei erfüllter Bedingung verschieben

VBA Zeilen bei erfüllter Bedingung verschieben
09.03.2016 10:40:43
Franz
Hallo zusammen,
ich habe mir unter Zuhilfenahme des Codes aus dem Beitrag VBA Zeilen verschieben wenn Bedingungen erfüllt eine Bestellübersicht gebastelt, allerdings habe ich ein paar Probleme und freue mich über jegliche Unterstützung!
Eine erledigte Bestellung, soll erst dann via Button ins Archiv verschoben werden können, wenn der Status (Spalte H) entsprechend "erledigt" ist und das "erledigt am" Datum (Spalte I) eingetragen wurde, sonst nicht und es erscheint ein entsprechender Hinweis.
Momentan ist es so, dass die Zeile bereits verschoben wird, wenn nur das Eingangsdatum (Spalte B) eingetragen wurde, diese Zeile zudem ins Nirvana verschwindet, wenn der Status leer bleibt.
Anbei meine Datei: Beispiel
Vielen Dank im Voraus!
Beste Grüße
Franz

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Zeilen bei erfüllter Bedingung verschieben
09.03.2016 11:16:20
UweD
Hallo
also ich würde das über Filter erledigen..

Dim wksQ As Worksheet, wksZ As Worksheet
Dim ZeileQ As Long, ZeileAnz As Long, ZeileZ As Long, Zeilen As Long
Const Zeile1 = 2 '1. Zeile mit einer Bestellung
Set wksQ = Worksheets("Eingang") 'Bestelleingaenge
Set wksZ = Worksheets("Archiv") 'Archivblatt
With wksQ
'naechste freie Zeilen
ZeileZ = wksZ.Cells(wksZ.Rows.Count, 3).End(xlUp).Row + 1
Zeilen = .Cells(.Rows.Count, 1).End(xlUp).Row
.Range("$A$1:$I$" & Zeilen).AutoFilter Field:=8, Criteria1:="=erledigt"
.Rows("2:" & Zeilen).Copy wksZ.Rows(ZeileZ)
.Rows("2:" & Zeilen).Delete Shift:=xlUp
.Range("$A$1:$I$6").AutoFilter Field:=8
End With

Die Prüfungen müsstest du noch einbauen..
Gruß UweD

Anzeige
AW: VBA Zeilen bei erfüllter Bedingung verschieben
09.03.2016 11:23:29
UweD
Erste Prüfung schon eingebaut....

If WorksheetFunction.CountIf(.Columns(8), "erledigt") > 0 Then
.Range("$A$1:$I$" & Zeilen).AutoFilter Field:=8, Criteria1:="=erledigt"
.Rows("2:" & Zeilen).Copy wksZ.Rows(ZeileZ)
.Rows("2:" & Zeilen).Delete Shift:=xlUp
.Range("$A$1:$I$6").AutoFilter Field:=8
End If

AW: VBA Zeilen bei erfüllter Bedingung verschieben
09.03.2016 11:41:15
Franz
Hallo,
danke für deinen tollen Ansatz! Ich werde mir das mit den Prüfungen noch eingehend ansehen müssen, um die 2. Bedingung mit dem "erledigt am" Feld hinzubekommen.
Momentan werden erledigte Zeilen im Archivblatt überschrieben, wie könnte ich das ändern?

Anzeige
AW: VBA Zeilen bei erfüllter Bedingung verschieben
09.03.2016 11:49:15
UweD
Das kann nur sein, wenn Mehr Zeilen vorhanden, aber in Spalte C Lücken am Ende sind.
Du prüfst die Erste freie Zeile in Spalte C =3

ZeileZ = wksZ.Cells(wksZ.Rows.Count, 3).End(xlUp).Row + 1
Du solltest auf die Spalte prüfen, die immer gefüllt ist (evtl. Spalte A =1)
oder das gesamte Blatt prüfen.

ZeileZ = wksZ.Cells.SpecialCells(xlCellTypeLastCell).Row + 1 'Letzte Zeile des gesamten Blattes
Gruß UweD

AW: VBA Zeilen bei erfüllter Bedingung verschieben
09.03.2016 11:58:39
Franz
Spitze, ich prüfe jetzt Spalte A und es funktioniert bestens!
Könntest du mir noch die zweite Prüfung für das "erledigt am" Datum verraten bzw. wie man die Zeilen ohne Formatierung verschiebt? Ich habe ein bisschen probiert und bin auf ".PasteSpecial Paste:=xlPasteValues" gestoßen, weiß aber nicht, wie es angewandt werden muss!
Jedenfalls danke!!
Gruß Franz

Anzeige
AW: VBA Zeilen bei erfüllter Bedingung verschieben
09.03.2016 12:26:01
UweD
so...

Dim wksQ As Worksheet, wksZ As Worksheet
Dim ZeileQ As Long, ZeileAnz As Long, ZeileZ As Long, Zeilen As Long
Const Zeile1 = 2 '1. Zeile mit einer Bestellung
Set wksQ = Worksheets("Eingang") 'Bestelleingaenge
Set wksZ = Worksheets("Archiv") 'Archivblatt
With wksQ
ZeileZ = wksZ.Cells(wksZ.Rows.Count, 1).End(xlUp).Row + 1
Zeilen = .Cells(.Rows.Count, 1).End(xlUp).Row
If WorksheetFunction.CountIf(.Columns(8), "erledigt") > 0 Then
.Range("$A$1:$I$" & Zeilen).AutoFilter Field:=8, Criteria1:="=erledigt"
If WorksheetFunction.CountA(.Range(.Cells(Zeile1, 9), .Cells(Zeilen, 9))) > 0 Then
.Range("$A$1:$I$" & Zeilen).AutoFilter Field:=9, Criteria1:="" ' leer
.Rows("2:" & Zeilen).Copy
wksZ.Rows(ZeileZ).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
.Rows("2:" & Zeilen).Delete Shift:=xlUp
.Range("$A$1:$I$" & Zeilen).AutoFilter Field:=9
End If
.Range("$A$1:$I$" & Zeilen).AutoFilter Field:=8
End If
End With
Gruß UweD

Anzeige
AW: VBA Zeilen bei erfüllter Bedingung verschieben
09.03.2016 13:35:01
Franz
Vielen lieben Dank, es funktioniert einwandfrei! :)
Gruß Franz

AW: VBA Zeilen bei erfüllter Bedingung verschieben
09.03.2016 13:51:57
Franz
Mir ist doch noch etwas aufgefallen, sorry!
Wenn man den Status "erledigt" setzt und ein "erledigt am" Datum in einer anderen Zeile, werden plötzlich alle Zeilen verschoben.
Darf ich nochmals um Rat bitten?!
Gruß Franz

AW: VBA Zeilen bei erfüllter Bedingung verschieben
09.03.2016 15:15:18
UweD
Das kann ich nicht nachvollziehen
Es wird erst nach "erledigt" gefiltert und dann, ob in den dann noch angezeigten Zeilen ein Eintrag in Spalte I vorhanden ist.
Wenn in H kein "erledigt" steht, ist egal, was in I steht.


Vorher: (die mit rotem x müssten ja verschoben werden.
Userbild
hier das Archiv:
Userbild
Hier die Ansicht nachher:
Userbild


richtig oder?
Dann musst du mal eine Musterdatei hochladen
LG UweD

Anzeige
AW: VBA Zeilen bei erfüllter Bedingung verschieben
11.03.2016 09:42:07
Franz
Entschuldige bitte meine späte Antwort!
Anbei meine Beispieldatei! Wenn man darin den Button klickt, werden alle Einträge verschoben, obwohl keine den Kriterien entsprechen (erledigt + Datum).
Vielen Dank für deine Hilfe!
Liebe Grüße
Franz

AW: VBA Zeilen bei erfüllter Bedingung verschieben
11.03.2016 12:44:39
UweD
OK.
Habe die Teilergebnis Funktion Subtotal eingebaut.

.Range("$A$1:$I$" & Zeilen).AutoFilter Field:=8, Criteria1:="=erledigt"
If WorksheetFunction.Subtotal(3, .Range(.Cells(Zeile1, 9), .Cells(Zeilen, 9))) > 0  _
Then
.Range("$A$1:$I$" & Zeilen).AutoFilter Field:=9, Criteria1:="" ' leer
Gruß UweD

Anzeige
AW: VBA Zeilen bei erfüllter Bedingung verschieben
14.03.2016 07:50:38
Franz
Guten Morgen,
vielen Dank, jetzt läuft es perfekt! :)
Liebe Grüße
Franz

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige