Microsoft Excel

Herbers Excel/VBA-Archiv

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

Kopieren von Daten unter Autofilter

Betrifft: Kopieren von Daten unter Autofilter von: Christian
Geschrieben am: 18.09.2014 14:21:54

Hallo liebe Gemeinde,

folgende Situation:

In dem Sheet Projektverfolgung befinden sich 30.000 Einträge, welche aus einer Access-Datenbank gezogen werden.

In einem vorherigen Schritt wird die Datenbank nach Mitarbeiter aufgeteilt. Bsp. zu Mitarbeiter X gehören Y Datensätze. Im unten aufgeführten Schritt werden die nach Mitarbeiter gefilterten Daten in das "Projectscreening" gezogen. Ein Sheet welches die Datensäte auswertet.

Mit dem aufgeführten Makro kommt der Kopiervorgang jedoch nicht zu einem Ende, ich denke es liegt an der größe der Datenbank. Er kopiert wahrscheinlich alle Zeilen, und nicht nur die, die über den Autofilter ausgegeben wurden. Daher also meine Frage:

Was muss ich in dem aufgeführten Makro einbauen, damit nur die gefilterten Einträge kopiert werden, und nicht alle Einträge?

Mit freundlichen Grüßen,

Christian

x = Workbooks("Prototyp11.xlsm").Sheets("Projektverfolgung").Range("A2").Row
y = Workbooks("Prototyp11.xlsm").Sheets("Projektverfolgung").Range("A2").Column
Z = 0

Do While Workbooks("Prototyp11.xlsm").Sheets("Projektverfolgung").Cells(x, y).Value <> ""
Z = Z + 1

Workbooks("Prototyp11.xlsm").Sheets("Projectscreening").Range("A3").Value = _
Workbooks("Prototyp11.xlsm").Sheets("Projektverfolgung").Cells(x, y).Value

Loop



MsgBox "Es wurden " & Z & " Vorgänge aktualisiert"

  

Betrifft: AW: Kopieren von Daten unter Autofilter von: Klaus M.vdT.
Geschrieben am: 18.09.2014 15:03:25

Hallo Christian,

Ich verstehe deinen Codefetzen nicht!
x = Workbooks("Prototyp11.xlsm").Sheets("Projektverfolgung").Range("A2").Row
x ist doch immer 2, da kannst du doch direkt x = 2 schreiben?

Zu deiner Frage (generell beantwortet, da keine Musterdatei):
Angenommen, deine Liste steht in A1:D100, in Zeile 1 stehen Überschriften. Es ist ein Autofilter gesetzt, der die Liste auf eine unbekannte Menge Zeilen zusammenfiltert. Mit:
Range("A2:D100").SpecialCells(xlCellTypeVisible).Copy
kopierst du dir alle sichtbaren Zellen aus dem Bereich heraus.
Achtung: ist keine Zelle sichtbar, kommt der Debugger!

Grüße,
Klaus M.vdT.


  

Betrifft: AW: Kopieren von Daten unter Autofilter von: Christian
Geschrieben am: 18.09.2014 15:25:51

Hallo KLaus,

vielen Dank für die schnelle Antwort!
Eine Beispieldatei kann ich leider nicht hochladen.

Die gefilterte Liste wird täglich aktualisiert und ist damit forlaufend.
Gibt es eine Möglichkeit die Range von A2 bis zu ende Der Spalten zu setzen?
Sowas wie Cells(x, y).Value <> ""


  

Betrifft: AW: Kopieren von Daten unter Autofilter von: Klaus M.vdT.
Geschrieben am: 19.09.2014 08:07:38

Hi Christian,
entweder klassisch, die letzte Zeile ermitteln und dann per Variable übergeben:

Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
Range("A2:D" & lastRow).SpecialCells(xlCellTypeVisible).Copy


Oder kürzer:

Range("A2:D" & Cells(Rows.Count, 1).End(xlUp).Row).SpecialCells(xlCellTypeVisible).Copy

das , 1) macht, dass die letzte Zeile aus Spalte A ( = 1 ) gesucht wird. Suchst du die letzte Zeile aus Spalte H, musst du stattdessen , 8) schreiben usw.

Denke daran, falls du das ganze in einen WIDTH-Rahmen legst, musst du nicht nur Range, sondern auch Cells und Rows.Count referenzieren. Wenn du nicht weist was ein WIDTH-Rahmen ist, ignoriere den letzten Satz einfach.

Grüße,
Klaus M.vdT.


 

Beiträge aus den Excel-Beispielen zum Thema "Kopieren von Daten unter Autofilter"