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

Makro sehr langsam

Makro sehr langsam
25.01.2023 10:58:08
JuliChen
Hallo in die Gruppe, ich habe Probleme mit einem Makro, was zwar funktioniert aber sehr langsam läuft. Ich habe nur wenig VBA Kenntnisse und vielleicht kann mir jemand helfen, dass Makro zu optimieren. Ich habe einen Report der sehr viele Tabellenblätter enthält. Das Makro soll 31 Tabellenblätter in eine neue Arbeitsmappe kopieren. Formate sollen übernommen und die Werte fixiert werden:
Sub report_fixieren_in_neue_datei()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.StatusBar = ""
Application.Calculation = xlCalculationManual
Application.CalculateBeforeSave = False
'Fixieren
Workbooks.Add
akt_dat_new = ActiveWorkbook.Name
akt_register_new = ActiveSheet.Name
Workbooks("Report2023.xlsm").Activate

Sheets("Tab1").Select
Sheets("Tab1").Copy Before:=Workbooks(akt_dat_new).Sheets(akt_register_new)
Workbooks(akt_dat_new).Activate
Sheets("Tab1").Select
Cells.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Workbooks("Report2023.xlsm").Activate

Sheets("Tab2").Select
Sheets("Tab2").Copy Before:=Workbooks(akt_dat_new).Sheets(akt_register_new)
Workbooks(akt_dat_new).Activate
Sheets("Tab2").Select
Cells.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Workbooks("Report2023.xlsm").Activate
usw. bis Blatt 31.
Hat jemand Optimierungsideen?
LG
Julia

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro sehr langsam
25.01.2023 11:15:15
Daniel
Hi
Das Selektieren von Objekten ist nicht notwendig.
Man kann die Befehle auch direkt an die Objekte anhängen.
Wenn man einen Zellbereich auf einem bestimmten Tabelkenblatt in erner Mappe ansprechen will, kann man auch diese Angaben direkt aneinander hängen.
Aus
Workbooks("Report2023.xlsm").Activate
Sheets("Tab1").Select
Sheets("Tab1").Copy Before:=Workbooks(akt_dat_new).Sheets(akt_register_new)
Workbooks(akt_dat_new).Activate
Sheets("Tab1").Select
Cells.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Wird
Workbooks("Report2023.xlsm").Sheets("Tab1").Copy Before:=Workbooks(akt_dat_new).Sheets(akt_register_new)
Workbooks(akt_dat_new).Sheets("Tab1").Cells.Copy
Workbooks(akt_dat_new).Sheets("Tab1").Cells.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Zusätzlich solltest du
Application.printcommunication = False
setzen, ansonsten ist das Sheets().Copy sehr langsam, weil Excel dann die Seiteneinrichtung mit übernimmt und dabei immer erst mit dem Druckertreiber redet.
Alternativ kann man auch in der anderen Datei ein leeres Blatt anlegen (Sheets.Add) und dann die Inhalte über kopieren.
Das Sheets.Copy braucht man nur, wenn wie gesagt die Seiteneinrichtung mit übernommen werden soll oder dem Tabellenblatt zugeordnete Makros.
Gruß Daniel
Anzeige
AW: Makro sehr langsam
25.01.2023 11:21:49
Rudi
Hallo,
Sub report_fixieren_in_neue_datei()
  Dim vntSheets, i As Integer
  Dim wks As Worksheet
  Application.ScreenUpdating = False
  
  For i = 1 To 31
    vntSheets = vntSheets & "|" & "Tab" & i
  Next i
  
  vntSheets = Mid(vntSheets, 2)
  vntSheets = Split(vntSheets, "|")
  
  Sheets(vntSheets).Copy
  
  For Each wks In ActiveWorkbook.Worksheets
    With wks.Cells
      .Cells.Copy
      .Cells.PasteSpecial xlPasteValues
    End With
  Next wks
  
  Application.CutCopyMode = False
End Sub
Gruß
Rudi
AW: Makro sehr langsam
25.01.2023 11:23:51
snb
Sub M_snb()
  with  Workbooks("Report2023.xlsm").Sheets("Tab1")
     sn = .Usedrange
    .Copy Workbooks(akt_dat_new).Sheets(akt_register_new)
  end with
  Workbooks(akt_dat_new).Sheets(1).usedrange = sn
End sub

Anzeige
AW: Makro sehr langsam
25.01.2023 12:38:51
Daniel
Hi
Anderer Weg:
Datei erstmal unter neuem Namen speichern, dann die Formeln eliminieren und dann nochmal speichern. Dann die Ursprungsdatei wieder öffnen.
Dim NameAlt as String
Dim SH as Worksheet
NameAlt = Thisworkbook.fullname
Thisworbook.save
Thisworkbook.saveas NeuerName, Dateityp
For each SH  in Thisworbook.Worksheets
    With SH.Usedrange
        .Copy
        .PasteSpecial xlpastevalues
    End with 
Next
Thisworkbook.save
Workbbooks.Open NameAlt
Gruß Daniel

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige