Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1504to1508
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

Schnelleres kopieren

Schnelleres kopieren
05.08.2016 09:15:57
Dominik
Hallo zusammen,
ich habe einen Code geschrieben, der gefilterte Zellen von einem Worksheet in ein anderes kopiert. Funktioniert soweit alles auch ganz gut, allerdings dauert das Kopieren zu lange. Ich denke mal das liegt daran, dass er immer zwischen den Sheets hin und her springt in der Schleife und jede Zelle einzeln auswählt. Wie kann ich hier eine schnellere Lösung erreichen?
Und was muss ich in meinem Code ändern, wenn ich die kopierten Zellen nicht in das gleiche Workbook einfügen will, sondern in eine komplett neue Datei?
Mein Code sieht folgendermaßen aus:
Private Sub CreateWorkCard_Click()
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim l As Integer
j = 0
l = 0
'Übernehmen der Überschrift
ActiveWorkbook.Sheets("Test").Cells(2, 2).Value = _
ActiveWorkbook.Sheets("Work Card").Cells(2, 5).Value
'Format übernehmen
ActiveWorkbook.Sheets("Work Card").Range("E2").Copy
Worksheets("Test").Range("B2").PasteSpecial Paste:=xlPasteFormats
Do Until Me.Cells(9, 5 + j).Value = ""
i = 0
k = 0
Do Until Me.Cells(9 + i, 5).Value = ""
If Me.Rows(9 + i).Hidden = False Then
'Automatisches Einfügen der ausgewählten P/N
ActiveWorkbook.Sheets("Test").Cells(4, 2).Value = _
ActiveWorkbook.Sheets("Work Card").Cells(4, 5).Value & "     " & _
ActiveWorkbook.Sheets("Work Card").Cells(9 + i, 4).Value
'Format übernehmen
ActiveWorkbook.Sheets("Work Card").Cells(4, 5).Copy
Worksheets("Test").Range("B4").PasteSpecial Paste:=xlPasteFormats
'Übernehmen der Informationen
ActiveWorkbook.Sheets("Test").Cells(5, 2).Value = _
ActiveWorkbook.Sheets("Work Card").Cells(5, 5).Value
'Format übernehmen
ActiveWorkbook.Sheets("Work Card").Cells(5, 5).Copy
Worksheets("Test").Range("B5").PasteSpecial Paste:=xlPasteFormats
'Übernehmen der eingeblendeten Tabelleninhalte
ActiveWorkbook.Sheets("Test").Cells(7 + k, 2 + l).Value = _
ActiveWorkbook.Sheets("Work Card").Cells(9 + i, 5 + j).Value
'Format übernehmen
ActiveWorkbook.Sheets("Work Card").Cells(9 + i, 5 + j).Copy
Worksheets("Test").Cells(7 + k, 2 + l).PasteSpecial Paste:=xlPasteFormats
k = k + 1
End If
i = i + 1
Loop
j = j + 1
l = l + 1
Loop
'Spaltenbreiten/Zeilenhöhen und Ausrichtung definieren
ActiveWorkbook.Sheets("Test").Columns(2).ColumnWidth = 95
ActiveWorkbook.Sheets("Test").Columns(3).ColumnWidth = 13
ActiveWorkbook.Sheets("Test").Columns(4).ColumnWidth = 13
ActiveWorkbook.Sheets("Test").Columns(5).ColumnWidth = 13
ActiveWorkbook.Sheets("Test").Columns(6).ColumnWidth = 20
ActiveWorkbook.Sheets("Test").Columns(7).AutoFit
Worksheets("Test").Rows.AutoFit
End Sub
Viele Grüße,
Dominik

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Schnelleres kopieren
05.08.2016 09:39:35
Fennek
Hallo,
es ist möglich und wesentlich schneller, ganze Bereiche auf einmal zu kopieren.
Beispiel: WB1.Sheets(1).range("B3:Z100").copy WB2.Sheets(2).cells(23, 6)
mfg
AW: Schnelleres kopieren
05.08.2016 09:43:56
Dominik
Hallo Fennek,
danke für die schnelle Antwort!
Könntest du mir evtl sagen wie das dann in meinem Code konkret auszusehen hätte? Die Range ist ja dann variabel, je nach dem welche Zellen ich gefiltert habe bzw. eingeblendet sind. Das müsste ja dann irgendwie in die Schleife mit rein, oder? Stehe da ziemlich auf dem Schlauch, da ich echt so gut wie keine Ahnung von VBA hab...
VG
AW: Schnelleres kopieren
05.08.2016 09:42:57
Daniel
Hi
wenn du mit mehren Workbooks arbeitest, dann schreibe einfach anstelle von ActiveWorkbook folgedes: Workbooks("Mappe1.xlsm") (also den entsprechenden Workbooknamen)
es müssen natürlich alle Mappen die du ansprechen willst geöffnet sein.
die Mappe, die das Makro enthält, kannst du immer mit ThisWorkbook ansprechen.
ansonsten ist die Schleife überflüssig.
du kannst einfach alle Zeilen in einem Schritt als Block kopieren und einfügen.
In gefilterten Tabellen überspringt Excel die ausgeblendeten Zellen automatisch und kopiert nur die sichtbaren Zeilen.
Im Zielblatt werden diese dann ohne Lücke eingefügt.
noch schneller geht es, wenn du vor dem Filtern die Tabelle nach der Filterspalte sortierst, so dass die sichtbaren Zeilen einen möglichst lückenlosen Block bilden. Je weniger Lücken (also ausgeblendete Zeilen zwischen drin) der zu kopierende Zellbereich hat, um so schneller geht das Kopieren.
Gruß Daniel
Anzeige
AW: kopieren in neue Datei
05.08.2016 09:46:19
Daniel
Hi.
kopieren in eine neue Datei geht so:
Workbooks.Add
ThisWorkbook.Sheets(...).Range(...).Copy
ActiveWorkbook.Sheets(1).Cells(1, 1).PasteSpecial xlpasteall
Thisworkbook ist die Datei mit dem Makro
nach dem Einfügen einer neuen Datei mit Workbooks.Add ist die neue Datei aktiv und kann über AcitveWorkbook angesprochen werden, solange du kein anderes Workbook aktivierst.
Gruß Daniel
AW: kopieren in neue Datei
05.08.2016 09:50:12
Dominik
Hallo Daniel,
erstmal vielen Dank für die super Tipps!!
Kannst du mir vielleicht noch verraten, wie das mit der Range dann genau funktioniert. Die ist doch dann variabel, je nach dem wie ich gefiltert habe, oder?
Anzeige
AW: kopieren in neue Datei
05.08.2016 10:06:47
Daniel
Hi
ja, aber es gibt da verschiedene Möglichkeiten.
wenn du eine befüllte Tabelle hast, kannst du mit
Range(linke obere Zelle).CurrentRegion

die ganze Tabelle auswählen und kopieren
oder du kannst mit
Cells(Rows.count, 1).End(xlup).Row

die Zeilennummer der letzten befüllten Zeile in Spalte A ermitteln
wenn du eine Autofilter hast, kannst du mit
ActiveSheet.Autofilter.Range

den Zellbereich des Autofilters ansprechen
wenn du den Zellbereich des autofiters ohne die Überschrift haben willst, dann so:
Intersect(ActiveSheet.Autofilter.Range, ActiveSheet.Autofilter.Range.Offset(1, 0))

dh die Schnittmenge aus dem Autofilterbereich und dem Autofilterbereich um eine Zeile nach unten versetzt.
Gruß Daniel
Anzeige
AW: kopieren in neue Datei
05.08.2016 10:58:13
Dominik
Okay, super. Vielen Dank dafür.
Ich probiere mich die Tage mal daran aus, sollte das mit deinen Tipps auf jeden Fall packen!
Danke und bis dann,
Dominik

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige