Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema ListBox
BildScreenshot zu ListBox ListBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema SpinButton
BildScreenshot zu SpinButton SpinButton-Seite mit Beispielarbeitsmappe aufrufen

VBA Zeilen bei erfüllter Bedingung verschieben

Betrifft: VBA Zeilen bei erfüllter Bedingung verschieben von: Franz
Geschrieben am: 09.03.2016 10:40:43

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

  

Betrifft: AW: VBA Zeilen bei erfüllter Bedingung verschieben von: UweD
Geschrieben am: 09.03.2016 11:16:20

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


  

Betrifft: AW: VBA Zeilen bei erfüllter Bedingung verschieben von: UweD
Geschrieben am: 09.03.2016 11:23:29

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



  

Betrifft: AW: VBA Zeilen bei erfüllter Bedingung verschieben von: Franz
Geschrieben am: 09.03.2016 11:41:15

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?


  

Betrifft: AW: VBA Zeilen bei erfüllter Bedingung verschieben von: UweD
Geschrieben am: 09.03.2016 11:49:15

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


  

Betrifft: AW: VBA Zeilen bei erfüllter Bedingung verschieben von: Franz
Geschrieben am: 09.03.2016 11:58:39

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


  

Betrifft: AW: VBA Zeilen bei erfüllter Bedingung verschieben von: UweD
Geschrieben am: 09.03.2016 12:26:01

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


  

Betrifft: AW: VBA Zeilen bei erfüllter Bedingung verschieben von: Franz
Geschrieben am: 09.03.2016 13:35:01

Vielen lieben Dank, es funktioniert einwandfrei! :)

Gruß Franz


  

Betrifft: AW: VBA Zeilen bei erfüllter Bedingung verschieben von: Franz
Geschrieben am: 09.03.2016 13:51:57

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


  

Betrifft: AW: VBA Zeilen bei erfüllter Bedingung verschieben von: UweD
Geschrieben am: 09.03.2016 15:15:18

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.


hier das Archiv:


Hier die Ansicht nachher:





richtig oder???

Dann musst du mal eine Musterdatei hochladen

LG UweD


  

Betrifft: AW: VBA Zeilen bei erfüllter Bedingung verschieben von: Franz
Geschrieben am: 11.03.2016 09:42:07

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


  

Betrifft: AW: VBA Zeilen bei erfüllter Bedingung verschieben von: UweD
Geschrieben am: 11.03.2016 12:44:39

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


  

Betrifft: AW: VBA Zeilen bei erfüllter Bedingung verschieben von: Franz
Geschrieben am: 14.03.2016 07:50:38

Guten Morgen,

vielen Dank, jetzt läuft es perfekt! :)

Liebe Grüße
Franz


 

Beiträge aus den Excel-Beispielen zum Thema "VBA Zeilen bei erfüllter Bedingung verschieben"