Announcement

Collapse
No announcement yet.

Problem beim beenden von Excel

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem beim beenden von Excel

    Hi,

    ich habe eine Access DB die Daten aus Excel einlesen vergleiche und auch in Excel zurückschreiben muss. Problem kurzumschrieben: Excel wird dann nicht richtig beendet und ich weiß nicht warum.

    Code:
    'die Variablen
        Dim ErrorCode As Boolean
        Dim objExcel As Excel.Application
        Dim objWorkbook As Workbook
        Dim objWorksheet As Worksheet
        Dim Row As Excel.Range
        Dim StartingRow, EndingRow As Long
    
        ErrorCode = False 'wird für den Ausstieg benutzt um zu unterscheiden ob speichern oder nicht
    
        Set objExcel = New Excel.Application
        objExcel.Visible = False
        
        Set objWorkbook = objExcel.Workbooks.Open(WorkbookPath, , False) 
        
        Dim i, N, M As Integer
        N = objWorkbook.Worksheets.count
        
        
        Set objWorksheet = objWorkbook.Worksheets(1)
    
    
       For Each objWorksheet In objWorkbook.Sheets
    '
    ' verschiedene Routinen
    '
            While i < EndingRow + 1 
    'blaa blaa blaa routine unter anderem mit ausstieg per Errorcode = true
                i = i + 1
            Wend
            objWorkbook.ActiveWorkbook.Save
    
        Next objWorksheet
    
    Errorhandles:
        If Not objWorkbook Is Nothing Then
            If objWorkbook.Name <> "" Then
                If ErrorCode = False Then
                    objWorkbook.Close savechanges:=True
                Else
                    objWorkbook.Close savechanges:=False
                End If
            End If
        End If
        
        If Not BreachTable Is Nothing Then
            BreachTable.Close
        End If
        
        If Not objExcel Is Nothing Then
            If objExcel.Workbooks.count = 0 Then
                objExcel.Application.Quit
            End If
        End If
    End Function
    Die Datei wird zwar geschloßen aber irgendwie auch nicht, der Prozess ist noch offen! Und hier liegt der Hund begraben... Machen die User den Import 10x haben sie also 10x die excel.exe geladen das ist nicht akzeptabel.

    wo liegt mein Fehler?
    Ich hab keine Ahnung was ich tue aber ich will es lernen

  • #2
    Hi,

    du musst alle mit Excel 'verbundenen' Objekten, hier insbesondere objWorkbook, vor dem Schliessen von Excel NULL zuweisen (set ObjWorkbook = NULL), sonst 'hält' Access das Objekt noch irgendwie fest.

    Erst danach kommt das .quit.


    P.S. Beim Überfliegen sieht das Ganze noch etwas unlogisch aus: Nach jedem Sheet wird bereits das Workbook gespeichert, unten soll dann im Fehlerfall eigentlich nicht gespeichert werden. Da ist es aber imho schon zu spät. Oder da steckt noch ein raise bzw. goto, das hier nicht sichtbar ist.
    Anyway, mehrfaches (nicht notwendiges) Speichern verlangsamt die Anwendung signifikant - einmal zum Schluss speichern reicht in der Regel.

    Viel Erfolg!
    Tino
    Ich habs gleich!
    ... sagte der Programmierer.

    Comment


    • #3
      Hi tino,

      vielen Dank für deine Hinweise.

      Problem ist das die Exceldatei von Menschen erstellt wurde und somit Fehler enthalten kann ich aber den ganzen Prozess nicht andauernd ändern will.

      Ich hab das speichern also nach jedem Sheet eingefügt weil dann wenigstens ein Teil der Arbeit erledigt ist und im Eskalationsfall per Handübernommen werden kann.

      Wie du richtig vermutet hast habe ich einen GoTo im Code fals ein Fehler auf einem Sheet auftaucht wird nicht gespeichert und die Datei freigegeben.

      WorestCase ist also der Fehler auf dem Ersten Sheet und die Orginaldatei bleibt erhalten...

      Ich werd das nachher gleichmal versuchen mit dem NULL setzen
      btw.: Null oder Nothing?

      hab immer das Problem zwischen .Net und VBA umdenken zumüssen und das VBA auch so einige eigenheiten hat die merkwürdig anmuten....
      Ich hab keine Ahnung was ich tue aber ich will es lernen

      Comment


      • #4
        Hallo Tino,

        vielen Dank für deinen Hinweis, du hattest vollkommen recht.
        Ich dachte das Workbook.close reicht aus aber das ist dem "Excel-Automatisierungsserver" wohl zu wenig und er beendet die Connection nicht richtig.
        Ich hab keine Ahnung was ich tue aber ich will es lernen

        Comment

        Working...
        X