tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
710
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Schlafor Schlafor ist offline Mitglied
    Registriert seit
    Jul 2008
    Beiträge
    23
    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!
     

  2. #2
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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

  3. #3
    Schlafor Schlafor ist offline Mitglied
    Registriert seit
    Jul 2008
    Beiträge
    23
    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

  1. Excel-Instazen bleiben nach Programmablauf bestehen
    Von Klein0r im Forum .NET Windows Forms
    Antworten: 3
    Letzter Beitrag: 15.08.08, 13:29
  2. Programm bleibt als Prozess bestehen
    Von Fridulin im Forum .NET Windows Forms
    Antworten: 10
    Letzter Beitrag: 01.07.08, 16:14
  3. Excel: Autofilter per Makro - Bereich bleibt leer
    Von mnbvcxy im Forum Office-Anwendungen
    Antworten: 1
    Letzter Beitrag: 10.07.07, 08:46
  4. Hilfe! Excel bleibt als Prozess erhalten
    Von sernetix im Forum Visual Basic 6.0
    Antworten: 5
    Letzter Beitrag: 11.10.03, 17:06
  5. Session bleibt bestehen :-(
    Von Alex2xm im Forum Hosting & Webserver
    Antworten: 1
    Letzter Beitrag: 08.10.03, 09:23