Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

Excel schließt nicht, nach Makro Ausführung

Forumthread: Excel schließt nicht, nach Makro Ausführung

Excel schließt nicht, nach Makro Ausführung
22.07.2025 11:54:32
Liv3pl4y
ich komme, trotz GPT und Google Suche nicht weiter. Ich habe ein Makro erstellt, welches aus einem Quellverzeichnis (Netzwerk Laufwerk) eine Datei kopiert und an anderer Stelle im weiteren Unterverzeichnis ablegt. Dabei wird nur geprüft ob die Datei schon mit aktuellen Datum vorhanden ist, oder nicht und gibt einen entsprechenden Log-Eintrag ab. Soweit funktioniert das auch alles einwandfrei. Nur wird mir Excel nicht beendet, nachdem das Makro den Kopiervorgang und das Logging durchgeführt hat.

Was habe ich versucht?
- Speichern Funktion deaktiviert (sollte natürlich aktiviert sein, wegen dem Logging)
- Application.Quit am Ende des Makros
- Application.Quit mit definierter Variable
- Bevor Application.Quit ausgeführt wird, Workbook Save mit und ohne Variable
- Verzögerter Workbook Open Sub mit OnTime Now
- TrustCenter Einstellungen mit/ohne Beachrichtigung, oder alle alle vertrauen - Immer das gleiche Ergebnis
-- Zugriff auf VBA-Projektmodell vertrauen ist aktiviert. Spiel aber auch keine Rolle, wenn es deaktiviert ist.

VBAProject -- MS Excel Objekte -- Diese Arbeitsmappe:
Private Sub Workbook_Open()

Application.OnTime Now + TimeValue("00:00:02"), "BackupIQOSFile"
End Sub


VBAProject -- Module -- Modul1:
Sub BackupIQOSFile()

Dim sourcePath As String
Dim targetPath As String
Dim fileName As String
Dim newFileName As String
Dim fullSourcePath As String
Dim fullTargetPath As String
Dim currentDate As String
Dim logSheet As Worksheet
Dim nextRow As Long
Dim logAction As String
Dim xlApp As Application
Dim wb As Workbook
Set xlApp = Application


' Pfade und Dateinamen
sourcePath = "\\eudewobsa01\Daten_EUDEWOBFS06\SAC-Upload\Region-DE\R-DE\Rohdaten (Manueller Import)\IQOS\"
targetPath = sourcePath & "Versionierung Test\Backup - Aktuelle Datei\"
fileName = "IQOS_Query_Primary-Export.xlsx"
currentDate = Format(Date, "dd.mm")
newFileName = currentDate & " " & fileName
fullSourcePath = sourcePath & fileName
fullTargetPath = targetPath & newFileName

' Logging vorbereiten
On Error Resume Next
Set logSheet = ThisWorkbook.Sheets("Log")
If logSheet Is Nothing Then
Set logSheet = ThisWorkbook.Sheets.Add
logSheet.Name = "Log"
logSheet.Range("A1:D1").Value = Array("Datum", "Uhrzeit", "Aktion", "Dateiname")
End If
On Error GoTo 0

' Prüfen, ob Quelldatei existiert
If Dir(fullSourcePath) = "" Then
logAction = "Quelldatei fehlt"
GoTo LogEntry
End If

' Prüfen, ob Zieldatei bereits existiert
If Dir(fullTargetPath) > "" Then
logAction = "Datei bereits vorhanden"
GoTo LogEntry
End If

' Datei kopieren
FileCopy fullSourcePath, fullTargetPath
logAction = "Datei kopiert"

LogEntry:
' Log-Eintrag schreiben
With logSheet
nextRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
.Cells(nextRow, 1).Value = Format(Now, "dd.mm.yyyy")
.Cells(nextRow, 2).Value = Format(Now, "HH:MM")
.Cells(nextRow, 3).Value = logAction
.Cells(nextRow, 4).Value = fullTargetPath
End With

' Alle geöffneten Arbeitsmappen schließen
For Each wb In xlApp.Workbooks
wb.Close SaveChanges:=True
Next wb

' Excel beenden
xlApp.Quit
Set xlApp = Nothing ' Objekt freigeben

End Sub


Ich habe gelesen, das es zu Problemen mit Netzwerkpfaden kommen kann, aber auch damit, wenn nicht alle Vorgänge beendet wurden, aber Application.Quit vorher aufgerufen wird. Ich nahm an, das könnte nur mit dem Speichern der Datei zusammenhängen, da das Ergebnis aber mit "saveChanges:=True und False gleich ist, kann es daran nicht liegen. Ich bin überfragt.

Es ist wichtig das, dass Makro nach dem Öffnen der Arbeitsmappe automatisch ausgeführt wird und Excel auch automatisch beendet wird. Da die Makro-Datei von einem Bot angesteuert wird.
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Excel schließt nicht, nach Makro Ausführung
22.07.2025 12:19:59
Sigi.21
Hallo,

ohne den Code genau angesehen zu haben, fällt mir dies hier auf:

For Each wb In xlApp.Workbooks
wb.Close SaveChanges:=True
Next wb

Du schließt damit alle Mappen. Auch die mit dem Code? Dann sind alle Makros beendet.
Das xlApp.Quit kann nicht mehr ausgeführt werden, weil die Mappe mit diesem Befehl geschlossen wurde.

Du kannst alle Mappen schließen - ausschließlich die Mappe mit Code (ThisWorkbook?). Dann diese Mappe speichern und xlApp.Quit.

Gruß Sigi
Anzeige
AW: Excel schließt nicht, nach Makro Ausführung
22.07.2025 12:22:00
peter
Hallo

Da Du ALLE Workbooks schliesst, begehts Du Selbstmord.



For Each wb In xlApp.Workbooks
If ThisWorkbook.FullName > wb.FullName Then
wb.Close SaveChanges:=True
End If
Next wb

ThisWorkbook.Save

xlApp.Quit



Peter
Anzeige
AW: Excel schließt nicht, nach Makro Ausführung
22.07.2025 12:23:44
Ulf
Hi,
ich würde mal so testen, denn ob in 2sec der Kopiervorgang sicher erledigt ist ???
und ob die aktive Mappe nicht zuerst geschlossen wird ??


Sub BackupIQOSFile()
' Dim sourcePath As String
' Dim targetPath As String
' Dim fileName As String
' Dim newFileName As String
' Dim fullSourcePath As String
' Dim fullTargetPath As String
' Dim currentDate As String
' Dim logSheet As Worksheet
' Dim nextRow As Long
' Dim logAction As String
' Dim xlApp As Application
' Dim wb As Workbook
' Set xlApp = Application

xlApp.EnableEvents = False

' ' Pfade und Dateinamen
' sourcePath = "\\eudewobsa01\Daten_EUDEWOBFS06\SAC-Upload\Region-DE\R-DE\Rohdaten (Manueller Import)\IQOS\"
' targetPath = sourcePath & "Versionierung Test\Backup - Aktuelle Datei\"
' fileName = "IQOS_Query_Primary-Export.xlsx"
' currentDate = Format(Date, "dd.mm")
' newFileName = currentDate & " " & fileName
' fullSourcePath = sourcePath & fileName
' fullTargetPath = targetPath & newFileName
'
' ' Logging vorbereiten
' On Error Resume Next
' Set logSheet = ThisWorkbook.Sheets("Log")
' If logSheet Is Nothing Then
' Set logSheet = ThisWorkbook.Sheets.Add
' logSheet.Name = "Log"
' logSheet.Range("A1:D1").Value = Array("Datum", "Uhrzeit", "Aktion", "Dateiname")
' End If
' On Error GoTo 0
'
' ' Prüfen, ob Quelldatei existiert
' If Dir(fullSourcePath) = "" Then
' logAction = "Quelldatei fehlt"
' GoTo LogEntry
' End If
'
' ' Prüfen, ob Zieldatei bereits existiert
' If Dir(fullTargetPath) > "" Then
' logAction = "Datei bereits vorhanden"
' GoTo LogEntry
' End If
'
' ' Datei kopieren
' FileCopy fullSourcePath, fullTargetPath
' logAction = "Datei kopiert"
'
'LogEntry:
' ' Log-Eintrag schreiben
' With logSheet
' nextRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
' .Cells(nextRow, 1).Value = Format(Now, "dd.mm.yyyy")
' .Cells(nextRow, 2).Value = Format(Now, "HH:MM")
' .Cells(nextRow, 3).Value = logAction
' .Cells(nextRow, 4).Value = fullTargetPath
' End With

' Alle geöffneten Arbeitsmappen schließen
' For Each wb In xlApp.Workbooks
If wb.FullName > ThisWorkbook.FullName Then
wb.Close SaveChanges:=True
End If
' Next wb

' Excel beenden
xlApp.EnableEvents = True
ThisWorkbook.Close SaveChanges:=True


' xlApp.Quit
' Set xlApp = Nothing ' Objekt freigeben

End Sub

hth
Ulf
Anzeige
AW: Excel schließt nicht, nach Makro Ausführung
22.07.2025 13:05:29
daniel
Hi

probiers mal so:

 For Each wb In xlApp.Workbooks

wb.save
Next wb

' Excel beenden
xlApp.Quit


du könntest auch versuchen, diesen Teil in ein eigenes Makro zu schreiben und dieses dann mit Application.Ontime aus dem Hauptmakro zu starten.
dann wird es erst ausgeführt, wenn dieses Makro vollständig beendet ist.

Gruß Daniel
Anzeige
AW: Excel schließt nicht, nach Makro Ausführung
22.07.2025 12:49:52
Liv3pl4y
Vielen Dank für die schnellen Antworten. Ich habe die vorgeschlagenen Änderungen eingefügt bzw. geändert. Leider besteht das Problem weiterhin. Ich hatte noch die Vermutung, dass es vielleicht mit installierten Add-Ins zusammenhängen könnten, aber auch dies erwies sich als falsch, nachdem ich alle deaktiviert hatte. Auch meine Vermutung, dass es mit dem Netzwerk Laufwerk zusammenhängt, erwies sich als falsch, da ich es auch im persönlichen OneDrive Verzeichnis ausprobiert hatte.
Anzeige
AW: Excel schließt nicht, nach Makro Ausführung
23.07.2025 12:05:17
Ulf
Hi,
FileCopy habe ich früher mit API SHFile.. oder Scripting-Runtime ersetzt, weil stabiler.
Have it a try


Option Explicit

Sub BackupIQOSFile()
' Dim sourcePath As String
' Dim targetPath As String
' Dim fileName As String
' Dim newFileName As String
' Dim fullSourcePath As String
' Dim fullTargetPath As String
' Dim currentDate As String
' Dim logSheet As Worksheet
' Dim nextRow As Long
' Dim logAction As String
' Dim xlApp As Application
' Dim wb As Workbook
' Set xlApp = Application

' xlApp.EnableEvents = False

' ' Pfade und Dateinamen
' sourcePath = "\\eudewobsa01\Daten_EUDEWOBFS06\SAC-Upload\Region-DE\R-DE\Rohdaten (Manueller Import)\IQOS\"
' targetPath = sourcePath & "Versionierung Test\Backup - Aktuelle Datei\"
' fileName = "IQOS_Query_Primary-Export.xlsx"
' currentDate = Format(Date, "dd.mm")
' newFileName = currentDate & " " & fileName
' fullSourcePath = sourcePath & fileName
' fullTargetPath = targetPath & newFileName
'
' ' Logging vorbereiten
' On Error Resume Next
' Set logSheet = ThisWorkbook.Sheets("Log")
' If logSheet Is Nothing Then
' Set logSheet = ThisWorkbook.Sheets.Add
' logSheet.Name = "Log"
' logSheet.Range("A1:D1").Value = Array("Datum", "Uhrzeit", "Aktion", "Dateiname")
' End If
' On Error GoTo 0
'
' ' Prüfen, ob Quelldatei existiert
' If Dir(fullSourcePath) = "" Then
' logAction = "Quelldatei fehlt"
' GoTo LogEntry
' End If
'
' ' Prüfen, ob Zieldatei bereits existiert
' If Dir(fullTargetPath) > "" Then
' logAction = "Datei bereits vorhanden"
' GoTo LogEntry
' End If
'
' ' Datei kopieren

If Not fsCopy(fullSourcePath, fullTargetPath) Then
'FEHLER
End If

' FileCopy fullSourcePath, fullTargetPath
' logAction = "Datei kopiert"
'
'LogEntry:
' ' Log-Eintrag schreiben
' With logSheet
' nextRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
' .Cells(nextRow, 1).Value = Format(Now, "dd.mm.yyyy")
' .Cells(nextRow, 2).Value = Format(Now, "HH:MM")
' .Cells(nextRow, 3).Value = logAction
' .Cells(nextRow, 4).Value = fullTargetPath
' End With

' Alle geöffneten Arbeitsmappen schließen
' For Each wb In xlApp.Workbooks
' If wb.FullName > ThisWorkbook.FullName Then
' wb.Close SaveChanges:=True
' End If
' Next wb

' Excel beenden
' xlApp.EnableEvents = True
' ThisWorkbook.Close SaveChanges:=True


' xlApp.Quit
' Set xlApp = Nothing ' Objekt freigeben

End Sub

Public Function fsCopy(ByVal strQuelle As String, ByVal strZiel As String) As Boolean
On Error GoTo fsCopyERR
Dim bOK As Boolean
Dim fso As Object
Set fso = VBA.CreateObject("Scripting.FileSystemObject")
'Early Binding
'Dim fso As Scripting.FileSystemObject
'Set fso = New Scripting.FileSystemObject
With fso
.CopyFile strQuelle, strZiel, True
bOK = .FileExists(strZiel)
End With
fsCopyOUT:
fsCopy = bOK
Exit Function
fsCopyERR:
bOK = False
Resume fsCopyOUT
End Function

hth
Ulf
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige