Anzeige
Archiv - Navigation
1900to1904
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 wird bei Ausführung imme langsamer

Makro wird bei Ausführung imme langsamer
06.10.2022 17:55:30
Andreas
Hallo allerseits,
ich habe mir aus dem Internet folgendes Makro herausgesucht, mit dem ich ca. 500 csv-Dateien in einem Ordner in xlsx-Dateien konvertiere. Das Makro beginnt recht schnell, verliert aber immer mehr an Geschwindigkeit. Wenn die letzte Datei nach ca. 15 Minuten konvertiert ist, ist Excel sehr lange nicht ansprechbar (der Ball (Mac) dreht sich nur noch). Gibt es eine Möglichkeit, dies schneller darzustellen, auch dass nach Ende des Makros Excel wieder sofort ansprechbar ist?
Vielen Dank im Voraus für Eure Hilfe.
Herzliche Grüße
Andreas

Public Sub CSV_in_XLSX_umwandeln()
Dim strPath As String
Dim strFile As String
strPath = "/Users/" & Environ("LOGNAME") & "/Library/Group Containers/UBF8T346G9.Office/MyExcelFolder/"
strFile = Dir(strPath & "*.csv")
Application.ScreenUpdating = False
Application.Calculation = xlManual
Do While strFile  ""
With Workbooks.Open(FileName:=strPath & strFile, Local:=True)
Application.DisplayAlerts = False
.SaveAs strPath & Replace(strFile, ".csv", ".xlsx", Compare:=vbTextCompare), xlOpenXMLWorkbook
Application.DisplayAlerts = True
.Close False
End With
strFile = Dir()
CutCopyMode = False
Loop
Application.ScreenUpdating = True
Application.Calculation = xlAutomatic
End Sub

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro wird bei Ausführung imme langsamer
06.10.2022 18:29:24
Nepumuk
Hallo Andreas,
durch das With Workbooks.Open... hast du immer mehr Workbook-Objekte im Arbeitsspeicher hängen.
Versuch es so:

Option Explicit
Public Sub CSV_in_XLSX_umwandeln()
Dim strPath As String
Dim strFile As String
Dim objWorkbook As Workbook
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
.DisplayAlerts = False
End With
strPath = "/Users/" & Environ$("LOGNAME") & "/Library/Group Containers/UBF8T346G9.Office/MyExcelFolder/"
strFile = Dir$(strPath & "*.csv")
Do Until strFile = vbNullString
Set objWorkbook = Workbooks.Open(Filename:=strPath & strFile, Local:=True)
With objWorkbook
Call .SaveAs(Filename:=strPath & Replace$(strFile, ".csv", ".xlsx", _
Compare:=vbTextCompare), FileFormat:=xlOpenXMLWorkbook)
Call .Close(SaveChanges:=False)
End With
Set objWorkbook = Nothing
strFile = Dir$
Loop
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
.DisplayAlerts = True
End With
End Sub
Gruß
Nepumuk
Anzeige
AW: Makro wird bei Ausführung imme langsamer
07.10.2022 07:55:34
Andreas
Hallo Nepumuk,
vielen Dank für die schnelle Antwort. Ich habe Dein VBA-Script getestet. Leider gibt es immer noch die gleichen Probleme. Es verliert auch an Geschwindigkeit, ist aber geringfügig schneller (Statt 15 Minuten jetzt nur noch 13,5 Minuten). Nach Beendigung leider das gleiche Problem wie vorher.
Herzliche Grüße
Andreas
AW: Makro wird bei Ausführung imme langsamer
06.10.2022 18:36:11
Luschi
Hallo Andreas,
bei solchen Gewalt-Import-Speichern-Aktionen solltest Du einen Zähler mitlaufen lassen und und regelmäßig den Befehl DoEvents einstreuen.
Außerdem sollten alle Excel-Einstellungen deaktiviert werden, die das Excel-System verlangsamen - siehe dazu im Browser nach: Excel Vba GetMoreSpeed
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Makro wird bei Ausführung imme langsamer
07.10.2022 08:41:19
Andreas
Hallo Luschi,
vielen Dank für den Tipp. Ich habe den Zähler eingebaut und alle 50 Durchläufe den Befehl DoEvents eingestreut. Laufzeit ist fast unverändert, aber ich habe 3 Minuten nach der letzten Konvertierung wieder Zugriff auf Excel. Das hilft schon mal weiter.
Vom Grundsatz bräuchte ich die Konvertierung gar nicht und würde die csv-Dateien importieren. Da bekomme ich aber anschließend Laufzeitfehler 1004 zurückgegeben und die einfachsten Funktionen, wie z.B. Application.WorksheetFunction.StDev(Range(Cells(1, "F"), Cells(21, "F"))) * 250 ^ 0.5 werden dann als Fehler zurückgewiesen. Ich muss allerdings auch gestehen. dass ich für das importieren der csv-Dateien den Macro-Rekorder genutzt habe, während ich für die xlsx-Dateien das nachfolgende Script gefunden habe, dass die Daten aus einer ungeöffneten Datei ausliest. Das funktioniert einwandfrei. Vielleicht hast Du ja einen Tipp, wie ich die csv-Dateien anders einlesen kann, ohne dass ich diese Laufzeitfehler 1004 bekomme.
Trotzden schon einmal vielen Dank für den DoEvents Tipp.
Herzliche Grüße
Andreas
' Die Funktion arbeitet mit der GetDataClosedWB zusammen
' Die Deklaration der Variablen für diese Funktion MUSS an dieserStelle stehen.
Dim Pfad As String
Dim Dateiname As String
Dim Blatt As String
Dim Bereich As String
Dim Ziel As Range
Pfad = "/Users/" & Environ("LOGNAME") & "/Library/Group Containers/UBF8T346G9.Office/MyExcelFolder/"
Dateiname = Daten & ".xlsx" ' aus welcher Datei sollen Daten ausgelesen werden?
Blatt = "Tabelle1" ' aus welcher Tabelle innerhalb der Datei sollen die Daten ausgelesen werden?
Bereich = "A1:B1275" ' aus welchem Bereich innerhalb der Tabelle sollen die Daten ausgelesen werden?
Set Ziel = ActiveSheet.Range("A1") ' in welchen Bereich sollen die ausgelesenen Daten kopiert werden? Genauer gesagt: Bei welcher Zelle soll anfangen werden, die Daten reinzukopieren? Bsp: ActiveCell geht auch
If GetDataClosedWB(Pfad, Dateiname, Blatt, Bereich, Ziel) Then
a = 0
End If

Public Function GetDataClosedWB(SourcePath As String, _
SourceFile As String, sourceSheet As String, _
SourceRange As String, TargetRange As Range) As Boolean
'Holt einen Bereich aus einer _geschlossenen_ Arbeitsmappe
'Nur in VBA zu verwenden; nicht aus einer Tabellenzelle heraus
'© t.ramel@mvps.org
' wird durch die HoleDaten aufgerufen
Dim strQuelle       As String
Dim Zeilen          As Long
Dim Spalten         As Byte
On Error GoTo InvalidInput
strQuelle = "'" & SourcePath & "[" & SourceFile & "]" & sourceSheet & "'!" & Range(SourceRange).Cells(1, 1).Address(0, 0)
Zeilen = Range(SourceRange).Rows.Count
Spalten = Range(SourceRange).Columns.Count
With TargetRange.Cells(1, 1).Resize(Zeilen, Spalten)
.Formula = "=IF(" & strQuelle & "="""",""""," & strQuelle & ")"
.Value = .Value
End With
GetDataClosedWB = True
Exit Function
InvalidInput:
MsgBox "Die Quelldatei oder der Quellbereich ist ungültig!", vbExclamation, "Get data from closed Workbook"
GetDataClosedWB = False
End Function

Anzeige
AW: Makro wird bei Ausführung imme langsamer
07.10.2022 23:00:21
Yal
Hallo Andreas,
um die Fehler zu vermeiden, greife auf dem CSV mithilfe von Power Query.
Siehe https://excelhero.de/power-query/power-query-ganz-einfach-erklaert
Um zu konvertieren, kann man Powershell verwenden. Siehe https://stackoverflow.com/questions/17688468/how-to-export-a-csv-to-excel-using-powershell

Start-Process -FilePath 'C:\Program Files\Microsoft Office\root\Office16\excelcnv.exe' -ArgumentList "-nme -oice ""$xlsFilePath"" ""$xlsToxlsxPath"""
Die Variablen $xlsFilePath und $xlsToxlsxPath musst Du anpassen.
Ansonsten die Version von Nepumuk mit
Set objWorkbook = Nothing
und direkt danach jedesmal DoEvents
(jedesmal sollte trotzdem schneller sein, als 3 Min warten)
VG
Yal
Anzeige
AW: Makro wird bei Ausführung imme langsamer
08.10.2022 11:26:19
Andreas
Vielen Dank Yal,
das muss ich mir als Laie mal in Ruhe anschauen. Power Query ist natürlich naheliegend. Das würde so einiges vereinfachen.
Herzliche Grüße
Andreas

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige