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

VBA: close all apps

Forumthread: VBA: close all apps

VBA: close all apps
01.09.2025 01:42:03
Hans
Hallo,

ich habe eine Excel Vorlage und speichere alle Änderungen per VBA und die Datei in einem anderen Ordner. Danach soll die App geschlossen werden. Aber egal mit welchem Code ich es aus dem Netz versuche die App lässt sich nicht schließen. Es wird immer nur das Workbook geschlossen. Im Task Manager sehe ich auch noch die App. Und je öfter ich den VBA code ausführe desto mehr Apps erscheinen im Taskmanager. Hat jemand eine Idee wie ich den Prozess bzw die App nachdem Makro beenden/schließen kann?

Damit geht es schon mal nicht:
ActiveWorkbook.Close

Application.Quit


Grüße
Hans
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: close all apps
01.09.2025 06:57:51
RPP63
Moin!
Ohne den übrigen Code ist eine Antwort schwierig.
Ich nehme aber an, dass Du eine neue Instanz erzeugst.
Zitat:
ich habe eine Excel Vorlage und speichere alle Änderungen per VBA und die Datei in einem anderen Ordner
Das dürfte ohnehin die falsche Vorgehensweise sein!
Du hast keine Vorlage, sondern missbrauchst eine .xlsm-Datei als "Vorlage".
Sehr viel besser ist es, eine "richtige" Vorlage (.xltm) zu nutzen:
https://support.microsoft.com/de-de/office/speichern-einer-arbeitsmappe-als-vorlage-58c6625a-2c0b-4446-9689-ad8baec39e1e

Gruß Ralf
Anzeige
AW: VBA: close all apps
01.09.2025 14:03:29
Hans
Hallo Ralf,

wenn ich eine Vorlage so wie im Link erstelle wird die nur für mich sichtbar sein nicht aber für die anderen. Gibt es denn keine alternative? Ich möchte eigentlich nur eine Excel Vorlage bei uns am Laufwerk ablegen, bei der das Makro auslösen und fertig. Das Makro erstellt anhand der eingegeben Seriennummer neue Ordner, trägt Daten in die Tabelle ein und speichert diese dann.

Kann oder sollte ich irgendwie das vorgehen ändern sodass ich keine zusätzliche Instanz öffne?

Mein Code sieht aktuell so aus und läuft. Das einzige was stört ist das noch eine Excel im Task MAnager aktiv ist.



Option Explicit
Private Declare PtrSafe Function SHCreateDirectoryExW Lib "Shell32.dll" (ByVal hwnd As LongPtr, ByVal pszPath As LongPtr, ByVal psa As LongPtr) As Long

Private Sub Save_Click()
Dim appExcel As Object
Dim FolderPicker As FileDialog
Dim myFolder As String
Dim SerialNo As String
Dim SavePath As String

Set appExcel = CreateObject("Excel.Application")
Set FolderPicker = Application.FileDialog(msoFileDialogFolderPicker)

With FolderPicker
.Title = "Please select the folder."
.AllowMultiSelect = False
If .Show > -1 Then Exit Sub
myFolder = .SelectedItems(1) & "\"
End With

SHCreateDirectoryExW 0, StrPtr(myFolder & "\" & SerialNo), 0

Call Berechnung

SavePath = myFolder & "\" & SerialNo & ".xlsm"
ActiveWorkbook.SaveAs2 FileName:=SavePath

Unload Me
Application.Quit
End Sub
Anzeige
AW: VBA: close all apps
01.09.2025 14:26:56
Kuwer
Hallo Hans,

lösche die Zeile
Set appExcel = CreateObject("Excel.Application")

Gruß, Uwe
AW: VBA: close all apps
01.09.2025 10:06:12
volti
Hallo Hans,

eine Idee. Versuche es mal hiermit...
Private Declare PtrSafe Function EnumWindows Lib "user32" ( _

ByVal lpEnumFunc As LongPtr, ByVal lParam As LongPtr) As Long
Private Declare PtrSafe Function GetClassNameA Lib "user32" ( _
ByVal hwnd As LongPtr, ByVal lpClassName As String, _
ByVal nMaxCount As Long) As Long
Private Declare PtrSafe Function PostMessageA Lib "user32" ( _
ByVal hwnd As LongPtr, ByVal wMsg As Long, _
ByVal wParam As LongPtr, ByVal lParam As LongPtr) As Long


Private Function EnumWindowProc(ByVal hwnd As LongPtr, lParam As LongPtr) As Long
Dim sText As String * 7

EnumWindowProc = 1
GetClassNameA hwnd, sText, 7
If sText Like "XLMAIN*" Then PostMessageA hwnd, &H10, 0, 0
EnumWindowProc = 1
End Function

Sub SchließeExcel()
Call EnumWindows(AddressOf EnumWindowProc, 0)
End Sub

Gruß
Karl-Heinz
Anzeige
AW: VBA: close all apps
01.09.2025 13:23:32
Hans
Danke Volti das muss ich gleich mal testen. Wie funktioniert das denn mit Word bzw was schreibt man da anstatt XLMain

Grüße
Hans
AW: VBA: close all apps
01.09.2025 15:21:42
volti
Hallo Hans,

ich habe den Code aufgrund der Vermutung von Ralf bzgl. mehrerer Instanzen hier gepostet.

Natürlich kann, wie Peter schon schrieb, Code nach dem Schließen des Workbooks, in der Code steht, dieser nicht mehr ausgeführt werden.

De ru.a. Code scannt alle gerade aktiven Apps Deines PCs durch und ermittelt die jeweilige Klasse.
Ich nehme deshalb die Klasse, damit alle gewünschten Apps unabhängig vom Captiontext gefunden werden....

Wird ein Fenster (App) mit der gewünschten Klasse gefunden, wird dieses Fenster geschlossen.
Bei mir werden alle Excel oder Wordapplicationen beendet.
Setzt allerdings voraus, dass keine Meldungen von entsprechend noch offenen Mappen/Dateien, wie z.B. "Wollen Sie speichern" mehr dazwischen funken.



Option Compare Text
Private Declare PtrSafe Function EnumWindows Lib "user32" ( _
ByVal lpEnumFunc As LongPtr, ByVal lParam As LongPtr) As Long
Private Declare PtrSafe Function GetClassNameA Lib "user32" ( _
ByVal hwnd As LongPtr, ByVal lpClassName As String, _
ByVal nMaxCount As Long) As Long
Private Declare PtrSafe Function PostMessageA Lib "user32" ( _
ByVal hwnd As LongPtr, ByVal wMsg As Long, _
ByVal wParam As LongPtr, ByVal lParam As LongPtr) As Long

Private Function EnumWindowProc(ByVal hwnd As LongPtr, lParam As LongPtr) As Long
Dim sText As String * 8

EnumWindowProc = 1
GetClassNameA hwnd, sText, 8
' If sText Like "XLMAIN*" or sText Like "EXCEL8*" Then PostMessageA hwnd, &H10, 0, 0 ' Excel
If sText Like "OpusApp*" Then PostMessageA hwnd, &H10, 0, 0 ' Word
EnumWindowProc = 1
End Function

Sub SchließeExcel()
Call EnumWindows(AddressOf EnumWindowProc, 0)
End Sub

Anzeige
AW: VBA: close all apps
01.09.2025 10:46:40
peter
Hallo

Wenn Du das Workbook mit dem Macro schliesst können keine weiteren Befehle ausgeführt werden, d.h. Application.Quit kommt niemals zum Zug. Verzichte auf Close.

Mfg.
Peter
AW: VBA: close all apps
01.09.2025 12:50:01
Hans
Hi Peter,

danke für den Tipp. Jetzt wird das aktive Fenster/App geschlossen, aber im Task Manager ist weiterhin eins offen.
Anzeige
AW: VBA: close all apps
01.09.2025 15:17:08
schauan
... dazu hat Uwe ja schon was geschrieben. Du erzeugst eine zusätzliche Excel-Session, die Du noch nicht mal verwendest.

Eine Kurzversion zum Abschießen von Excel wäre übrigens das:

Shell "taskkill /f /im excel.exe"

Forumthreads zu verwandten Themen

Anzeige
Anzeige