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

Excel aus VBA beenden funktioniert nicht

Forumthread: Excel aus VBA beenden funktioniert nicht

Excel aus VBA beenden funktioniert nicht
28.08.2002 15:04:50
Burkhard
Hallo Leute!

Ich habe das folgende Problem, dass Excel bei mir immer im Hintergrund aktiv bleibt, obwohl ich es aus VBA schließe. Es verschwindet erst dann aus dem Taskmanager, wenn ich mein VBA-Tool beende.

Meine Frage ist nun zunächst, welches der richtige Weg zum schließen ist, denn beide Versionen funktionieren nicht, sobald ich ein Diagramm fülle, siehe Bsp. D.h. ohne die Diagrammschleife, verschwindet auch Excel im zweiten Fall. Wenn jemand einen Tip dazu hätte, wäre ich sehr dankbar.

Viele Grüße an alle aus diesem super Forum

Burkhard

Mit dieser Version funktioniert es mit/ohne Diagramm Routine nicht:
****************************************************************
Dim Ex As New Excel.Application
Set Ex = Excel.Application
Ex.Workbooks.Open FileName:="C:\XYZ\XZY.xls"

MsgBox "Habe Excel geöffnet!"

Ex.ActiveWorkbook.Activate
Ex.Sheets("Projekte").Activate

Ex.Application.DisplayAlerts = False
Ex.ActiveWorkbook.SaveAs FileName:="C:\XYZ\WXZY.xls"

Ex.ActiveWorkbook.Close 'SaveChanges:=False
Ex.Application.Quit
Set Ex = Nothing
****************************************************************
Dim Ex As New Excel.Application
Set Ex = Excel.Application
Ex.Workbooks.Open FileName:="C:\XYZ\XZY.xls"

MsgBox "Habe Excel geöffnet!"

Ex.ActiveWorkbook.Activate
Ex.Sheets("Projekte").Activate

Ex.Sheets("XY-Diagramm").Select
Ex.ActiveChart.SeriesCollection(1).Select
Ex.ActiveChart.SeriesCollection(1).Delete

'Diese Schleife ist ein bisschen abgekürzt

Do Until Ex.Sheets("Projekte").Range(Zeilenzaehler).Value = ""

Ex.ActiveChart.SeriesCollection.NewSeries
Ex.ActiveChart.SeriesCollection(DR).XValues = Sheets("Projekte").Range(BN) 'Spalte B
Ex.ActiveChart.SeriesCollection(DR).Values = Sheets("Projekte").Range(BR) 'Spalte C
Ex.ActiveChart.SeriesCollection(DR).Name = Sheets("Projekte").Range(BPN) 'Spalte A
Ex.ActiveChart.ChartType = xlXYScatter

z = z + 1 'Zähler für die Sheet-Reihen
DR = DR + 1 'Zähler für DiagrammReihe = DR

BPN = "B" & z 'BubbleProjektname
BN = "C" & z 'BubbleNutzen
BR = "D" & z 'BubbleRisiko
BKV = "E" & z 'BubbleKostenVolumen

Loop

Ex.Application.DisplayAlerts = False
Ex.ActiveWorkbook.SaveAs FileName:="C:\XYZ\WXZY.xls"

Ex.ActiveWorkbook.Close 'SaveChanges:=False
Ex.Application.Quit
Set Ex = Nothing
****************************************************************

In dieser Version funktioniert es nur ohne Diagramm-Routine!!!
****************************************************************
Dim Ex As Object
Set Ex = CreateObject("excel.application")

Ex.Workbooks.Open FileName:="C:\XYZ\WXZY.xls"
Ex.Visible = True
ExNr = Ex.Sheets.Count
MsgBox "Anzahl der Ex-Sheets ist: " & ExNr

Ex.Application.DisplayAlerts = False
Ex.ActiveWorkbook.SaveAs FileName:="C:\Daten\Burkhard\Uni\Diplomarbeit\Excel\BS1.xls"
Ex.Application.DisplayAlerts = True
Ex.ActiveWorkbook.Close
Ex.Quit
Set Ex = Nothing

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: Excel aus VBA beenden funktioniert nicht
28.08.2002 16:05:31
Axel
Hallo,

laß in den beiden ersten Prozeduren die überflüssige zweite Anweisung (set Ex = Excel.Application) raus.

In der ersten Anweisung wird ja bereits eine neue Excel-Instanz durch das Schlüsselwort New erstellt.

Durch die zweite Anweisung wird ein weitere Instanz ins Leben gerufen. Da diese aber derselben Objektvariablen Ex zugewiesen wird, kannst Du auf die erste Instanz nicht mehr zugreifen und diese somit auch nicht mehr terminieren.

Gruß
Axel

Anzeige
Re: Excel aus VBA beenden funktioniert nicht
28.08.2002 17:41:34
Burkhard
Hallo Axel!

Danke zunächst mal für deine schnelle Antwort, aber leider funktioniert auch dies nicht richtig! Es funktioniert nur, wenn ich Excel aufrufe und wieder schließe.

Sobald ich aber an mein Diagramm gehe d.h. eine Schleife zum befüllen des Diagramms einsetze, bleibt Excel offen und das obwohl ich ja keine neue Instanz aufmache. Excel verschwindet erst dann wieder, wenn ich mein Tool schließe!

Folgende zwei Anweisungen habe ich dabei ausprobiert (Win2000/Office XP):

Dim Ex As New Excel.Application

und

Dim Ex As Object
Set Ex = CreateObject("excel.application")

jeweils mit und ohne Diagramm

folgendes habe ich auch getestet, aber da schreibt du ja, dass das nicht funktionieren kann.

Dim Ex As New Excel.Application
Set Ex = Excel.Application

Also deshalb noch mal die Frage, was mache ich falsch, denn es funktioniert ja ohne Diagramm?

Gruß
Burkhard

Anzeige
;
Anzeige

Infobox / Tutorial

Excel aus VBA beenden – Lösungen und Tipps


Schritt-für-Schritt-Anleitung

Um Excel aus VBA zu beenden, kannst du folgende Schritte befolgen:

  1. Instanz von Excel erstellen: Vermeide die doppelte Instanzierung. Nutze einfach Dim Ex As New Excel.Application oder Dim Ex As Object gefolgt von Set Ex = CreateObject("excel.application").

    Beispiel:

    Dim Ex As New Excel.Application
    Ex.Workbooks.Open FileName:="C:\XYZ\XZY.xls"
  2. Excel sichtbar machen: Wenn du die Excel-Anwendung sehen möchtest, setze Ex.Visible = True.

  3. Daten verarbeiten: Führe deine Datenmanipulationen durch, beispielsweise das Befüllen von Diagrammen.

  4. Arbeitsbuch schließen: Nach den Änderungen musst du das Arbeitsbuch schließen. Nutze dabei:

    Ex.ActiveWorkbook.Close SaveChanges:=False
  5. Excel beenden: Um Excel zu schließen, verwende:

    Ex.Application.Quit
  6. Instanz freigeben: Setze die Variable auf Nothing:

    Set Ex = Nothing

Häufige Fehler und Lösungen

  • Excel bleibt im Hintergrund aktiv: Dies geschieht oft, wenn mehr als eine Instanz von Excel erstellt wird. Entferne überflüssige Zeilen wie Set Ex = Excel.Application, um sicherzustellen, dass du immer mit der gleichen Instanz arbeitest.

  • Diagramm wird nicht aktualisiert: Achte darauf, dass die Schleifen in deinem VBA-Code korrekt sind und dass keine Excel-Objekte offen bleiben, die die Instanz von Excel aktiv halten.

  • Excel vba application.quit nicht working: Überprüfe, ob du vor dem Aufruf von Quit alle offenen Arbeitsbücher geschlossen hast. Ansonsten kann Excel nicht ordnungsgemäß beendet werden.


Alternative Methoden

Eine alternative Methode besteht darin, direkt die Application-Instanz zu verwenden. Anstatt eine neue Instanz zu erstellen, kannst du die bestehende Instanz wie folgt schließen:

Application.DisplayAlerts = False
ActiveWorkbook.Close SaveChanges:=False
Application.Quit

Hiermit wird die aktive Instanz von Excel direkt geschlossen, was in vielen Fällen einfacher und effektiver ist.


Praktische Beispiele

  1. Einfaches Beispiel:

    Sub CloseExcel()
       Dim Ex As Object
       Set Ex = CreateObject("Excel.Application")
       Ex.Workbooks.Open "C:\XYZ\XZY.xls"
       ' ... (Datenbearbeitung)
       Ex.ActiveWorkbook.Close SaveChanges:=False
       Ex.Quit
       Set Ex = Nothing
    End Sub
  2. Mit Diagramm:

    Sub UpdateChart()
       Dim Ex As Object
       Set Ex = CreateObject("Excel.Application")
       Ex.Workbooks.Open "C:\XYZ\XZY.xls"
       ' ... (Diagramm aktualisieren)
       Ex.ActiveWorkbook.Close SaveChanges:=False
       Ex.Quit
       Set Ex = Nothing
    End Sub

Tipps für Profis

  • Nutze Application.Quit nur, wenn du sicher bist, dass alle wichtigen Daten gespeichert sind, um Datenverlust zu vermeiden.
  • Überlege, ob du Application.DisplayAlerts auf False setzen möchtest, um Dialoge zu unterdrücken, die das Schließen verzögern könnten.
  • Verwende vba application.quit without saving, wenn du sicher bist, dass du keine Änderungen speichern möchtest.

FAQ: Häufige Fragen

1. Warum bleibt Excel im Hintergrund, wenn ich es aus VBA schließe?
Das liegt oft daran, dass eine zweite Instanz von Excel eröffnet wurde, die nicht korrekt geschlossen wird.

2. Wie schließe ich Excel ohne das Speichern von Änderungen?
Verwende ActiveWorkbook.Close SaveChanges:=False, bevor du Application.Quit aufrufst.

3. Was ist der Unterschied zwischen Application.Quit und ActiveWorkbook.Close?
Application.Quit schließt die gesamte Excel-Anwendung, während ActiveWorkbook.Close nur das aktuelle Arbeitsbuch schließt.

4. Funktioniert excel vba application.quit immer?
Ja, es funktioniert, solange du alle Arbeitsmappen geschlossen hast und keine weiteren Prozesse die Excel-Anwendung offen halten.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige