ERLEDIGT
NEIN
NEIN
ANTWORTEN
2
2
ZUGRIFFE
710
710
EMPFEHLEN
-
Hi,
ich schlage mich momentan mit einem Automation Problem herum:
Szenario:
Access VBA - Hauptanwendung
Steuere Excel aus Access über Automation
Import von Daten weitesmöglich automatisieren, da ich die Standardfunktionen von Access unbefriedigend finde.
Problem:
Nach dem Import bleibt auf dem Rechner eines Anwneders immer eine Instanz von Excel im Taskmanager unter Prozesse im Hintergrund geöffnet, obwohl ich eigentlich sicherstelle, dass alle globalen Referenzen auf die Instanz auf Nothing gesetzt werden.
Damit dürfte für Excel eigentlich kein Grund mehr bestehen die Anwendung, die aus Access gestartet wurde im Hintergrund für eine möglich Automation vorzuhalten. Ich habe ja alle Referenzen geschlossen.
Noch komischer: Auf meinem Client läuft alles wunderbar. Ob Excel vorher lief oder nicht - egal. Die Anwendung wird völlig korrekt behandelt und bleibt nur geöffnet, wenn sie zuvor auch geöffnet war. Nur beim Anwender klappt es wieder nicht
.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
Private Sub Class_Terminate() Call endExcel End Sub Private Sub Class_Initialize() Call getExcelReference xlsApp.visible = True xlsApp.ScreenUpdating = False Set xlsBook = New VBA.Collection Set parStartCell = New VBA.Collection Set xlsChart = New Scripting.Dictionary Set openBook = New VBA.Collection End Sub Private Function endExcel() Dim book As Object 'On Error GoTo Error_Handler: terminationConfirmed = True For i = 1 To xlsBook.count xlsApp.workbooks(xlsBook.Item(i).name).Close False Call xlsBook.Remove(i) Next i Set xlsBook = Nothing Set parStartCell = Nothing Set ws = Nothing Set openBook = Nothing Set eventBook = Nothing Set xlsChart = Nothing If xlWasOpen = False Then xlsApp.Application.DisplayAlerts = False xlsApp.Application.Quit Else xlsApp.Application.visible = True xlsApp.Application.ScreenUpdating = True For Each book In xlsApp.workbooks If book.Windows(1).visible = False Then book.Windows(1).visible = True End If Next book Set book = Nothing End If Set xlsApp = Nothing Exit Function Error_Handler: Debug.Print Err.Number End Function Private Sub getExcelReference() ' try to get excel application reference On Error GoTo START_EXCEL ' if excel is running already, a reference is set Set xlsApp = GetObject(, "Excel.application") xlWasOpen = True Exit Sub START_EXCEL: xlWasOpen = False ' excel is not running ' start excel 'Debug.Print err.Description Set xlsApp = CreateObject("Excel.application") End Sub
Hoffe mir kann jemand helfen.
Vielen Dank - Uuudellelliiieeee ich hasse VBA!
-
item: Im fall von xlsWasOpen=false würde ich alle Workbooks schliessen, nicht nur diejeinigen die du in xlsBook hinterlegt hast.
item: warum immer den Umweg über Application? Eigentlich müsste xlsApp.Quit auch funktionieren, da ja xlsApp bereits als Excel.Application definiert ist.
Keine Ahnung ob das was nützt. Du kannst aber auch mal auf die Zeile 'Set xlsApp = Nothing' ein Breakpoint setzen und beim debuggen mit den Inhalt von xlsApp überprüfen. Ggf. das ganze auch noch vor dem quit---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Hi,
erstaml danke für Deine Zeit aber das wars leider noch nicht. Ich habe es auf mehreren clients getestet, mit dem Resultat, dass es überall funktioniert, nur nicht beim Anwender. Scheint also wirklich client-spezifisch zu sein.
Ich werde wohl mit der unsauberen Lösung leben müssen, den Prozess nach Beendigung der Imports automatisch zu killen.
Zu den Workbooks - ich setze beim Start ein Flag, falls Excel bereits geöffnet war, sammle ich alle workbooks ein und schließe nach den Automation aktionen immer nur diejenigen workbooks, die nicht bereits beim Start geöffnet waren. Will ja nicht des Nutzers Arbeit zu Nichte machen.
Viele Grüße und - Uuuudellellieee ich hasse VBA!
Ähnliche Themen
-
Excel-Instazen bleiben nach Programmablauf bestehen
Von Klein0r im Forum .NET Windows FormsAntworten: 3Letzter Beitrag: 15.08.08, 13:29 -
Programm bleibt als Prozess bestehen
Von Fridulin im Forum .NET Windows FormsAntworten: 10Letzter Beitrag: 01.07.08, 16:14 -
Excel: Autofilter per Makro - Bereich bleibt leer
Von mnbvcxy im Forum Office-AnwendungenAntworten: 1Letzter Beitrag: 10.07.07, 08:46 -
Hilfe! Excel bleibt als Prozess erhalten
Von sernetix im Forum Visual Basic 6.0Antworten: 5Letzter Beitrag: 11.10.03, 17:06 -
Session bleibt bestehen :-(
Von Alex2xm im Forum Hosting & WebserverAntworten: 1Letzter Beitrag: 08.10.03, 09:23





Zitieren

Login





