Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1552to1556
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

Export (Copy) , sehr langsam

Export (Copy) , sehr langsam
25.04.2017 07:15:34
Thomas
Guten Morgen Profis,
ich habe wieder ein Problem, meine Export funktion ist sehr langsam und funktioniert noch nicht zu 100%! vielleicht kann mir jemand weiter helfen!
Ich möchte gerne das Excel per VBA mir einmal die gefilterten Daten in eine neue Arbeitsmappe kopiert, das funktioniert soweit.
Und dann soll er noch einfach 1:1 ein ausgeblendes Deckblatt inkl Formatierung übernehmen, das funktionert nicht so wie es soll
Hier meine Testdatei
https://www.herber.de/bbs/user/113084.xlsm
Wäre schön, falls mir jemand helfen könnte.
Vielen Dank
Thomas

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
...und wo ist der VBA-Code, bitte? (owT)
25.04.2017 08:29:21
EtoPHG

AW: ...und wo ist der VBA-Code, bitte? (owT)
25.04.2017 08:44:45
Thomas
Der VBA Code ist in der Testdatei unter Tabelle1("Anlieferung")
Alternative hier:
Private Sub cmd_export_Click()
If MsgBox("Sind alle Spalten eingeblendet?", vbYesNo, "Exportieren") = vbYes Then
Dim lngZeile As Long
Dim strQuellTabName As String
strQuellTabName = ActiveSheet.Name
Dim Pfad As String
Dim strDateiname As String
Dim wksTmp As Worksheet
Set wksTmp = Worksheets.Add
Sheets(strQuellTabName).Range("C1:C" & Range("C1").End(xlDown).Row).SpecialCells( _
xlCellTypeVisible).Copy Destination:=wksTmp.Range("B1")
Sheets(strQuellTabName).Range("A1:A" & Range("A1").End(xlDown).Row).SpecialCells( _
xlCellTypeVisible).Copy Destination:=wksTmp.Range("C1")
Sheets(strQuellTabName).Range("F1:F" & Range("F1").End(xlDown).Row).SpecialCells( _
xlCellTypeVisible).Copy Destination:=wksTmp.Range("A1")
wksTmp.Copy
Application.DisplayAlerts = False
wksTmp.Delete
Application.DisplayAlerts = True
With ActiveWorkbook
.ActiveSheet.Name = "Anlieferung"
.Worksheets.Add before:=ActiveSheet
With ActiveSheet
.Copy
.Name = "Deckblatt"
End With
End With
ActiveSheet.PrintPreview
Pfad = "C:\\Pfad\"
strDateiname = "Exportdatei_.xls"
Application.Dialogs(xlDialogSaveAs).Show Pfad & strDateiname
End If
End Sub

Anzeige
AW: ...und wo ist der VBA-Code, bitte? (owT)
25.04.2017 09:26:41
EtoPHG
Hallo Thomas,
Zitat: Ich möchte gerne das Excel per VBA mir einmal die gefilterten Daten in eine neue Arbeitsmappe kopiert, das funktioniert soweit.
Das kann ich mir aufgrund deines Codes nicht vorstellen, weil
a) Du nur dann kopierst, wenn die Frage mit JA beantwortet wird. Wenn der Benutzer lügt, dann werden nur die sichtbaren, gefilterten Daten kopiert. Sagt er die Wahrheit, wird gar nix gemacht!
b) Ich sehe nirgends einen .Copy für das Worksheet("Deckblatt") in die neue Mappe.
c) Warum du erst alles in ein TMP-Sheet kopierst, dann dieses ins Clipboard sicherst und es löschst, um es wiederum aus dem Clipboard einzufügen. Ist mir völlig schleierhaft.
d) Natürlich führt c) zur Verlangsamung, aber nicht merkbar!
Ich weiss also nicht, was genau du mit diesen "Von hinten durch die Brust ins Auge"-Ansätzen verfolgst!
Auch die Definition ...funktioniert noch nicht zu 100%! gibt mir keine brauchbare Information!
Gruess Hansueli
Anzeige
AW: Export (Copy) , sehr langsam
25.04.2017 09:20:29
Daniel
Hi
Tabellenblätter kopieren dauert in Excel recht lange.
besser ist, eine komplette leere Datei anzulegen und dann die Daten dort hin zu kopieren.
(allerdings muss man dann ggf die Seiteneinrichtung für den Druck neu machen)
Private Sub cmd_export_Click()
If MsgBox("Sind alle Spalten eingeblendet?", vbYesNo, "Exportieren") = vbYes Then
Dim wb As Workbook
Dim AnzSheets As Long
Dim strDateiname As String
Dim Pfad As String
'--- Neue Datei mit zwei Blättern anlegen
AnzSheets = Application.SheetsInNewWorkbook
Application.SheetsInNewWorkbook = 2
Set wb = Workbooks.Add
Application.SheetsInNewWorkbook = AnzSheets
wb.Sheets(1).Name = "Deckblatt"
wb.Sheets(2).Name = "Anlieferung"
'--- Deckblatt kopieren
ThisWorkbook.Sheets("Deckblatt").Columns.Copy
wb.Sheets(1).Cells(1, 1).PasteSpecial xlPasteAll
With Me.Cells(1, 1).CurrentRegion
.Columns(6).Copy wb.Sheets(2).Cells(1, 1)
.Columns(3).Copy wb.Sheets(2).Cells(1, 2)
.Columns(1).Copy wb.Sheets(2).Cells(1, 3)
End With
ActiveSheet.PrintPreview
' ActiveWorkbook.PrintOut Preview:=True
'--- Datei speichern
Pfad = "C:\\Pfad\"
strDateiname = "Exportdatei_.xls"
Application.Dialogs(xlDialogSaveAs).Show Pfad & strDateiname
End If
End Sub
das Kopieren der Spalten kannst du beschleunigen, wenn du vor dem Setzen des Autofilters die Tabelle nach der Spalten, mit der du filtern willst, sortierst, so dass alle zu kopierenden Zellen einen lückenlosen Block bilden.
Excel tut sich dann leichter. Das kopieren der Zeilen 1 bis 3 als Block geht schneller als das Kopieren der Zeilen 1, 3 und 5.
Gruß Daniel
Anzeige
AW: Export (Copy) , sehr langsam
25.04.2017 18:51:15
Thomas
Hi,
Daniel , vielen dank für deine Hilfe, leider bringt mir die Zeile
 With Me.Cells(1, 1).CurrentRegion

einen Fehler!
Weist du vielleicht warum?
Danke Thomas
AW: Export (Copy) , sehr langsam
26.04.2017 14:39:27
Daniel
Hi
sorry, nein.
Wenn ich meinen Code in deiner Beispieldatei für den Button einfüge, funktioniert es fehlerfrei.
von daher kann ich dir nicht viel dazu sagen.
du müsstest mir dann schon die Datei, in der der Fehler auftritt, zur verfügung stellen.
Gruß Daniel
AW: Export (Copy) , sehr langsam
26.04.2017 17:28:23
Thomas
Hi Daniel,
ich habe den Fehler gefunden, es lag daran, dass der ExportButton in einer UserForm hinterlegt war!
Jedoch habe ich jetzt noch ein anderes Problem, er kopiert mir alles in eine neue Excel Datei, dass ist schon mal perfekt, jedoch ist der 3ten Spalte eine Formel hinterlegt, bei der er mir nur die Werte in die neue Datei schreiben soll?!
Vielen Dank
Thomas
Anzeige
AW: Export (Copy) , sehr langsam
26.04.2017 17:37:54
Daniel
Hi
naja, hellsehen kann ich nicht.
man sollte schon darauf achten, dass die Beispieldatei der echten Datei zumindest im Aufbau entspricht.
Sollte es Abweichnungen geben, sollte man die auch in der Beschreibung erwähnen.
bei einem ActiveX-Button auf einem Tabellenblatt ist ME das Tabellenblatt mit dem Button.
bei einer Userform ist ME natürlich die Userform.
wenn nur Werte geschreiben werden sollen, dann ersetze:
Quellbereich.Copy Zielbereich
durch
Quellbereich.copy
Zielbereich.PasteSpecial xlpastevalues
Zielbereich.PasteSpecial xlpasteformats
Gruß Daniel
Anzeige
AW: Export (Copy) , sehr langsam
26.04.2017 17:45:21
Thomas
Vielen Herzlichen Dank.
Schön das es so nette Leute wie dich gibt!
Du hast mich meiner Perfekten Exceldatei wieder einen Schritt näher gebracht!!
Schönen Abend
LG Thomas
AW: Export (Copy) , sehr langsam
25.04.2017 09:36:16
UweD
Hallo
versuch es mal so...
Private Sub cmd_export_Click()
    If MsgBox("Sind alle Spalten eingeblendet?", vbYesNo, "Exportieren") = vbYes Then
        Dim iMonat As String, iJahr As String
        Dim lngZeile As Long
        Dim strKunde As String
        Dim strDateiname As String
        Dim Pfad As String
        
        Dim wbQuell As Workbook, wbNeu As Workbook
        Dim wksQuellTab As Worksheet, wksTmp As Worksheet
        
        Set wbQuell = ThisWorkbook
        Set wksQuellTab = wbQuell.ActiveSheet
        Set wksTmp = Worksheets.Add
        
        Application.ScreenUpdating = False
        With wksQuellTab
            .Range("C1:C" & Range("C1").End(xlDown).Row).SpecialCells(xlCellTypeVisible).Copy _
                Destination:=wksTmp.Range("B1")
            .Range("A1:A" & Range("A1").End(xlDown).Row).SpecialCells(xlCellTypeVisible).Copy _
                Destination:=wksTmp.Range("C1")
            .Range("F1:F" & Range("F1").End(xlDown).Row).SpecialCells(xlCellTypeVisible).Copy _
                Destination:=wksTmp.Range("A1")
        End With
        
        wksTmp.Move
        Set wbNeu = ActiveWorkbook
        
        wbNeu.ActiveSheet.Name = "Anlieferung"
        With wbQuell.Sheets("Deckblatt") 'nur sichtbares Blatt kopierbar 
            .Visible = xlSheetVisible
            .Copy Before:=wbNeu.Sheets(1)
            .Visible = xlSheetHidden
        End With
        
        wksQuellTab.Activate
        wbNeu.Sheets("Deckblatt").Visible = xlSheetHidden 'Kopie wieder verstecken 
        
        ActiveSheet.PrintPreview
       ' ActiveWorkbook.PrintOut Preview:=True 
       
    
        Pfad = "C:\\Pfad\"
        strDateiname = "Exportdatei_.xls"
        Application.Dialogs(xlDialogSaveAs).Show Pfad & strDateiname
    End If
End Sub
LG UweD
Anzeige
AW: Export (Copy) , sehr langsam
25.04.2017 20:44:16
Thomas
Bringt leider auch nicht den gewünschten erfolg :(
LG
Thomas

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige