Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1316to1320
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

Probleme mit Application.quit

Probleme mit Application.quit
23.06.2013 17:25:47
Norman
Hallo alle
Habe folgenden Code:
Private Sub CommandButton1_Click()
Dim app As Excel.Application
Set app = New Excel.Application
Dim wb As Workbook
Set wb = app.Workbooks.Add(ThisWorkbook.Path & "\Test.xlt")
Set wb = Nothing
Set app = Nothing
Application.Quit
End Sub

Meine Meinung war, dass dadurch, dass ich eine neue Excel-Instanz erzeuge, beim Application.quit die aktuelle Excel-Instanz geschlossen wird, die "neue" (aus app) aber offen bleibt. Dem ist aber nicht so, es gehen beide zu. Ich möchte aber die Excel-Instanz, in der der Code ausgeführt ist, schließen, während die andere offen bleibt.
Geht das und wenn ja wie?
Bin für Tipps dankbar :)
Gruß
Norman

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Probleme mit Application.quit
23.06.2013 17:39:21
Tino
Hallo,
bist Du sicher das beide zu gehen?
Ich sehe kein app.Visible = True, daher denke ich die ist offen nur nicht sichtbar!?
Schau mal im Taskmanager nach da müsste noch Excel.exe offen sein!
Private Sub CommandButton1_Click()
Dim app As Excel.Application
Dim wb As Workbook
Set app = New Excel.Application
Set wb = app.Workbooks.Add(ThisWorkbook.Path & "\Test.xlt")
app.Visible = True
Set wb = Nothing
Set app = Nothing
Application.Quit
End Sub
Gruß Tino

AW: Probleme mit Application.quit
23.06.2013 18:02:23
Norman
Danke für den Tipp Tino, Check ich gleich mal. Das "ungünstige" ist, dass ein Thread auf das schließen von Excel wartet. Aber obwohl die Arbeitsmappe mit dem Code zugeht bleibt die andere offen UND führt dazu, dass der aufrufende Thread endlos loopt. Die prozess-ID von Excel scheint bei beiden Workbooks die gleiche zu sein, obwohl sie das durch New Excel.Application gar nicht sein dürfte. Wenn ich auf application.quit einen breakpoint setze, kurz warte und dann den Code weiter laufen lasse, dann funktioniert alles so wie ich es mir wünsche. Komische Sache.
Gruß Norman

Anzeige
zeige mal Beispiele
23.06.2013 18:22:54
Tino
Hallo,
wenn Du die beiden Dateien als Beispiel hochladen könntest,
könnte man sich dies Mal anschauen.
Beide als Zip-Archiv dann bleiben auch die Dateinamen erhalten.
Gruß Tino

AW: hier ein Beispiel wie ich es machen würde
23.06.2013 19:47:09
Norman
Hi Tino, vielen Dank, musste noch mal weg, schaue es mir an und gebe dann Feedback :)
Bis später

AW: hier ein Beispiel wie ich es machen würde
23.06.2013 21:52:15
Norman
Ich rufe Deine Instanz_schließen.xls über .NET auf, und zwar mit folgendem Code:
Private Declare Function FindExecutable Lib "shell32.dll" Alias "FindExecutableA" (ByVal lpFile As String, ByVal lpDirectory As String, ByVal lpResult As String) As Integer
Private Sub CommandButton1_Click()
StartDatei ThisWorkbook.Path & "\Instanz_Schließen.xls"
End Sub

Public Function AnwendungFuerDatei(ByVal a_Datei As String) As String
'Datei: Pfad + Dateinamen einer existierenden Datei
Dim pfad As String
pfad = Space(256)
Call FindExecutable(a_Datei, vbNullString, pfad)
If ""  pfad Then
pfad = Trim(Left(pfad, InStr(pfad, vbNullChar) - 1))
End If
AnwendungFuerDatei = pfad
End Function

Public Sub StartDatei(ByVal Filename As String)
Dim s2 As String, s3 As String, n As Integer
s2 = AnwendungFuerDatei(Filename)
If ""  s2 Then
s3 = Chr(34) & s2 & Chr(34) & " /automation /r " & Chr(34) & Filename & Chr(34)
n = Shell(s3, vbNormalFocus) 'vbHide)
End If
End Sub

Wenn ich das Ganze in Excel Packe (siehe https://www.herber.de/bbs/user/85983.zip
), dann geht das auch. In .NET wartet Shell, bis Excel geschlossen wird. Und dann klappt es nicht mehr. Vom Prinzip ist Dein Code der richtige, aber wegen .NET klappt es nicht. Ich muss mir was anderes einfallen lassen. Trotzdem vielen Dank für die Hilfe!
Viele Grüße
Norman

Anzeige
Problem auch mit Excel
23.06.2013 22:39:06
Norman
Noch eine Ergänzung, die mein Dilemma auch in Excel zeigt:
Wenn ich die Datei "Instanz_Schließen.xls" aus dem Zip öffne läuft alles Glatt, so wie es soll.
Wenn ich aber "Caller.xls" öffne und dann auf den Button klicke kommt "Soll die Datei Test1.xls" gespeichert werden. Das ist anders als bei "Instanz_Schließen.xls" und zeigt das Problem: Text1.xls liegt nämlich nicht in der neuen Instanz von Excel, sondern in der "alten" aus "Instanz_Schließen.xls" - sonst würde bei Application.quit aus "Instanz_Schließen.xls" heraus nicht diese Meldung kommen.
Bin doch noch mal für einen Tipp dankbar.
Gruß
Norman

Anzeige
AW: Problem auch mit Excel
23.06.2013 23:40:48
Tino
Hallo,
rufe die Instanz_Schließen.xls so auf, auch in einer neuen Application.
  Dim xlApp As Object
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
xlApp.Workbooks.Open ThisWorkbook.Path & "\Instanz_Schließen.xls"
Gruß Tino

hier die Dateien.
24.06.2013 00:03:06
Tino
Hallo,
https://www.herber.de/bbs/user/85984.zip
Den Sinn verstehe ich aber ehrlich gesagt nicht,
wieso muss es immer neue Instanz sein?
Wenn sich alles in einer abspielt müsste es doch leichter zu steuern sein?!
Gruß Tino

Anzeige
AW: hier die Dateien.
24.06.2013 00:26:39
Norman
Hey Tino,
danke für die Änderung, bringt mich aber leider auch nicht weiter.
Der Hintergrund ist folgender: .NET wartet bei SHELL, bist die APP, die aufgerufen wurde, geschlossen wird. Ich rufe Excel mit einem Workbook auf, das ein neues Workbook erzeugt. Dann soll das erste Workbook sich schließen und das zweite offen bleiben. Wenn beide in einer Instanz liegen, kann .NET nicht weiter machen, da es immer noch wartet, dass auch die zweite Datei geschlossen wird.
Ich forsch mal weiter, trotzdem danke für Deine Unterstützung...
Gruß
Norman

müsste doch in Net auch gehen
24.06.2013 01:06:01
Tino
Hallo,
in etwa so?
Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, _
                              ByVal e As System.EventArgs) _
                              Handles Button1.Click

        Dim xlApp As Object = CreateObject("Excel.Application")
        xlApp.Visible = True
        xlApp.Workbooks.Open (Application.StartupPath & "\Instanz_Schließen.xls")
    End Sub
End Class
Gruß Tino

Anzeige
Funktioniert, danke :)
24.06.2013 08:12:11
Norman
Hi Tino, stimmt, manchmal sieht man den Wald vor lauter Bäumen nicht :) Jetzt klappts, vielen Dank!!!
Gruß
Norman

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige