deamonsadi
Goto Top

Excel Instanz wird nicht beendet

Hallo Forumgemeinde!!!
Bin total neu und einfach aufgeschmissen!!! ^^
Mein Vorgänger hat eine Access Abfrage von Excel Dateien gemacht und ich soll dies Weiterpflegen!!!

Leider hat er mir auch einige Fehler hinterlassen!
Der gravierenste Fehler ist folgender:
Mein ImportMod funktioniert einwandfrei soweit ich die Ergebnisse der Auswertungen beurteilen kann!
Leider wenn ich mehr Importier wird mein System und das öffnen langsamer,
da immer mehr Excel Instanzen offen sind und sich nach dem Import nicht mehr schließen!
Auch das lesen von etlichen Forenbeiträgen auch in anderen Foren hat mich nicht weitergebracht!
Hab schon fast alles umdeklariert aber es Funktioniert mit den beschreibungen nicht!

Hilfe!!


Import Mod:
Option Compare Database

Sub Import(Path As String, Tabelle As String, ByRef Datum As Date)
On Error GoTo Err_Handler
    Dim app As Excel.Application
    Dim wbk As Excel.Workbook
    Dim wks As Excel.Worksheet
    Dim rsKat As DAO.Recordset
    Dim rsCode As DAO.Recordset
    Dim rsTabelle As DAO.Recordset
    Dim zeile As Integer
    Dim zSumme As Long ' Zeilen summe, wenn diese 0 ist kommt immer eine neue Kategorie  
       

    'Warnmeldung ausschalten  
    DoCmd.SetWarnings False
    
    'Prüfen das der Pfad nicht leer ist  
    If Path <> "" Then  
    
        'Sanduhr  
        DoCmd.Hourglass True
        
        'Excel öffnen  
        Set app = New Excel.Application
        Set wbk = app.Workbooks.Open(Path)
        Set wks = wbk.Worksheets("Sheet1")  
        
        'Recordsets init  
        Set rsKat = CurrentDb.OpenRecordset("Kategorie", dbOpenDynaset)  
        Set rsCode = CurrentDb.OpenRecordset("Code", dbOpenDynaset)  
        Set rsTabelle = CurrentDb.OpenRecordset(Tabelle, dbOpenDynaset)
        zSumme = 0
        
        'Anzahl der Spalten bestimmen  
        Select Case Tabelle
            Case "Anfragen"  
                Spalten = 27
            Case "CBDaten"  
                Spalten = 20
            Case "Kunde"  
                Spalten = 27
        End Select
                
        'Zielen durchlaufen und in die Datenbank schreiben  
        zeile = 3
        Do While wks.Cells(zeile, 1) <> "Summe Fachteams"  
            'K_ID heraussuchen  
            If zSumme = 0 Then
                'Prüfen ob es diese Kategorie schon gibt  
                Lookup = DLookup("K_ID", "Kategorie", "Kategorie Like '" & wks.Cells(zeile, 1) & "'")  
                If Lookup > 0 Then
                    K_ID = Lookup
                Else
                    'Neue Kategorie anlegen  
                    With rsKat
                        .AddNew
                        !Kategorie = wks.Cells(zeile, 1)
                        K_ID = !K_ID
                        wbk.Update
                    End With
                End If
                
                zSumme = Zeilensumme(wks, zeile)
            Else
                zSumme = zSumme - Zeilensumme(wks, zeile)
                
                'Codegruppe ermitteln  
                 Lookup = DLookup("C_ID", "Code", "K_ID = " & K_ID & " AND Code Like '" & wks.Cells(zeile, 1) & "'")  
                'Prüfen ob der Code schon vorhanden ist, sonst anlegen  
                If Lookup > 0 Then
                    C_ID = Lookup
                Else
                    With rsCode
                    .AddNew
                    !K_ID = K_ID
                    !Code = wks.Cells(zeile, 1)
                    C_ID = !C_ID
                    .Update
                    End With
                End If
                
                'Anfragendaten einfügen  
                With rsTabelle
                    .AddNew
                    !Monat = Datum
                    !C_ID = C_ID
                    For i = 2 To Spalten
                       .Fields(i) = wks.Cells(zeile, i)
                    Next i
                    .Update
                End With
             End If
             
            zeile = zeile + 1
        Loop
        
        'Aufräumen  
        rsKat.Close
        Set rsKat = Nothing
        rsCode.Close
        Set rsCode = Nothing
        rsTabelle.Close
        Set rsTabelle = Nothing
        'Sanduhr  
        DoCmd.Hourglass False
        
    End If 
    
    'Wanrmeldungen wieder anschaltenen, man weiß ja nie  
    DoCmd.SetWarnings True
Exit_Err_Handler:
    Exit Sub
    
Err_Handler:

    MsgBox "Es konnten Zeilen nicht importiert werden. Ist die Datei vielleicht schon Importiert?(" + Err.Description + " " + Err.Source + ")"  

    
    DoCmd.Hourglass False
    Resume Exit_Err_Handler:

End Sub
' Berechnet aus einer Zeile eine Zeilensumme  
Function Zeilensumme(wks As Excel.Worksheet, zeile As Integer) As Long
    'Es ist ausreichend nur die Spalte Rückfragen ohne Gesrpäche und Rufzeit zu addieren, da ich noch keine Zeile gefunden habe  
    'wo alle 3 Spalten null sind. Sollte das irgendwann einmal auftrauchen muss hier dann noch eine weiter Spalte mit eingerechnet werden  
    'Für Den CB noch die Spalte 15 die nie Null ist  
    Zeilensumme = wks.Cells(zeile, 10) _
                + wks.Cells(zeile, 11) _
                + wks.Cells(zeile, 15) _
                + wks.Cells(zeile, 16)
                
End Function

Ich hoff der Fehler steckt irgendwo da drin!

[Edit Biber] Codeformatierung [/Edit]^^

Content-Key: 162278

Url: https://administrator.de/contentid/162278

Printed on: April 19, 2024 at 09:04 o'clock

Member: TsukiSan
TsukiSan Mar 09, 2011 at 12:55:52 (UTC)
Goto Top
Hallo DeamonSadi,

wenn du deine Zeilen mal als CODE formatieren könntest, dann könnte man dir sagen, in welcher Zeile das
wbk.close
fehlt. Das würde deine Exceltabelle im Anschluss wieder schließen.

Gruss
Tsuki
Member: DeamonSadi
DeamonSadi Mar 09, 2011 at 13:39:20 (UTC)
Goto Top
Habs jetzt so eingefügt nach gefühl!!!

Da sollt alles vorbei sein und da ist glaub ich das close Sinnvoll!!!
Und danke für deine schnelle Antwort!!!
Mich würd aber auch Interessieren ob dies die selbe Stelle ist wie bei dir!!!

MFG

Sadi

End If

'Wanrmeldungen wieder anschaltenen, man weiß ja nie


wbk.close


DoCmd.SetWarnings True
Exit_Err_Handler:
Exit Sub

Err_Handler:

MsgBox "Es konnten Zeilen nicht importiert werden. Ist die Datei vielleicht schon Importiert?(" + Err.Description + " " + Err.Source + ")"


DoCmd.Hourglass False
Resume Exit_Err_Handler:

End Sub

Ps.: Ein Microcontroller in Assembler wär mir Tausendmal lieber
Member: DeamonSadi
DeamonSadi Mar 09, 2011 at 13:43:47 (UTC)
Goto Top
LOL also bei 24 Dateien sind immer noch 2 Instantzen offen geblieben
Member: RDiller
RDiller Mar 09, 2011 at 15:47:18 (UTC)
Goto Top
Hallo Sadi,

Ganz am Schluß musst Du die Objekte auch wieder "leeren", d.h. folgender Code fehlt:

Set wks = Nothing
Set wbk = Nothing
Set app = Nothing


Achtung, das muss in jedem möglichen Exit stehen, d.h. auch in
Exit_Err_Handler:

Achtung, Du hast Exit_Err_Handler: 2 x deklariert!!!!!
Member: DeamonSadi
DeamonSadi Mar 10, 2011 at 06:32:24 (UTC)
Goto Top
Guten Morgen,
also ich habs jetzt wieder voll getesten mit allen Daten die ich hatte!!!
Es klappt!!! ^^
Hab dies so unter Block
'Aufräumen
und in
Err_Handler
stehen:

'Excel schließen

Set wks = Nothing
wbk.Close
Set wbk = Nothing
Set app = Nothing

Hoff wenn jemand auch so ein Problem hat kann er sich damit weiterhelfen!!!
Und Danke nochmal für die schnelle Hilfe!!!

LG

Euer Sadi