Excel Instant wird nicht gelöscht

26/10/2007 - 13:13 von marsud | Report spam
Hallo zusammen,

Ich hab folgen des Problem:

Es soll aus den Daten der Access Datenbank eine Excel Tabelle mit
mehreren Tabellenblàttern erstellt werden. Der Einfachheit halber
wurde ein Template erstellt, in das die Daten an den entsprechenden
Stellen eingetragen werden und am Ende mit einem SaveAs gespeichert
werden.

Das befüllen des Templates funktioniert einwandfrei. Mein Problem ist
der Schluss. Es ist egl, ob ich Excel aus Access schließe, oder die
Excel Tabelle anzeige und durch den Benutzer schließen lasse. Wenn die
Tabelle geschlossen wird ist die Excel Instanz im Task Manager immer
noch vorhanden. Wenn ich Access schließe, verschwindet auch die Excel
Instanz im Taskmanager. Daraus folgere ich, dass Access immer noch
eine Verbindung zu der geöffneten Instanz hat.

Wàre toll wenn hier jemand eine Antwort hàtte.


Hier mal ein Code Auszug:

'
=' Es gibt mehrere createSheet Prozeduren, die sich im Inhalt des
Resultset der Abfragen unterscheiden und
' damit ebenfalls die Daten in unterschiedlichen Tabellenblàttern an
unterschiedlichen Zellen eintràgt. Das
' Handling mit dem Workbook und dem ActiveSheet ist überall identisch
'
=Public Sub createSheet1(ByRef workbook As Excel.workbook)

On Error GoTo error_handling

Const startRow = 9

Dim currentRow As Integer
currentRow = startRow

Dim rs As Recordset
Set rs = DBEngine(0)(SES_INPUT_STR).OpenRecordset("qry_test")
rs.filter = "consumer_protocol=" & p_id
Set rs = rs.OpenRecordset

Debug.Print rs.RecordCount


If rs.RecordCount = 0 Then
Exit Sub
End If

workbook.Sheets(TEST).activate


With rs
.MoveFirst

While Not .EOF

' Werte aus der Datenbank
ActiveSheet.Cells(currentRow, "D")
= .Fields("ill_count")
ActiveSheet.Cells(currentRow, "E")
= .Fields("location")
ActiveSheet.Cells(currentRow, "F")
= .Fields("location_name")

' Stunden
Dim period As Integer
period = .Fields("ill_period")

currentRow = currentRow + 1
.MoveNext

If Not .EOF Then
Dim rangeStr As String
rangeStr = "A" & currentRow - 1 & ":O" &
currentRow - 1
ActiveSheet.range(rangeStr).Select
Selection.Copy
ActiveSheet.range("A" & currentRow).Select
Selection.Insert Shift:=xlDown
End If
Wend

End With

Set ActiveSheet = Nothing
Set workbook = Nothing

Exit Sub

error_handling:
Debug.Print Err.Number & ": " & Err.Description
Resume Next

End Sub

... (weitere Subs, die àhnlich aufgebaut sind und sich nur in der Art
und Positionierung der Daten unterscheiden) ...

'
=' Wird aus der Oberflàche per On_Click und aus einer Test Funktion
aufgerufen !
'
=Public Sub xLSCreation()

Dim xlsObject As Object
Dim customerName As String

Set xlsObject = New Excel.Application

On Error GoTo error

' protokoll-ID für den Filter
p_id = getCurrentProtocol.getProtocolId

With xlsObject

.Workbooks.Open("c:\Auswertung.xls").activate
.Visible = True

Call createSheet1(.ActiveWorkbook)
Call createSheet2(.ActiveWorkbook)
Call createSheet3(.ActiveWorkbook)
Call createSheet4(.ActiveWorkbook)
Call createSheet5(.ActiveWorkbook)

Dim filename As String
filename = getCurrentProtocol.getCustomer.getId
filename = filename & "_" &
getCurrentProtocol.getCustomer.getName
filename = filename & "_" &
Year(getCurrentProtocol.getProtocolDate)
filename = filename & "-" &
Month(getCurrentProtocol.getProtocolDate)
filename = filename & "-" &
Day(getCurrentProtocol.getProtocolDate)

.ActiveWorkbook.Application.CutCopyMode = False
.ActiveWorkbook.SaveAs (filename & ".xls")

End With

Set xlsObject.ActiveWorkbook.ActiveSheet = Nothing
Set xlsObject.ActiveWindow = Nothing
Set xlsObject.ActiveWorkbook = Nothing
Set xlsObject = Nothing

Exit Sub

error:
Debug.Print Err.Number & ": " & Err.Description
Resume Next

End Sub

'
=' test prozedur in einem globalen Modul
'
=Public Sub test_Export()

setCurrentProtocol (2)
Dim export As SES_XLS_Export
Set export = New SES_XLS_Export
export.xLSCreation
Set export = Nothing

End Sub
 

Lesen sie die antworten

#1 Peter Fleischer
05/11/2007 - 17:14 | Warnen spam
"marsud" schrieb im Newsbeitrag
news:
Hallo zusammen,

Ich hab folgen des Problem:

Es soll aus den Daten der Access Datenbank eine Excel Tabelle mit
mehreren Tabellenblàttern erstellt werden. Der Einfachheit halber
wurde ein Template erstellt, in das die Daten an den entsprechenden
Stellen eingetragen werden und am Ende mit einem SaveAs gespeichert
werden.

Das befüllen des Templates funktioniert einwandfrei. Mein Problem ist
der Schluss. Es ist egl, ob ich Excel aus Access schließe, oder die
Excel Tabelle anzeige und durch den Benutzer schließen lasse. Wenn die
Tabelle geschlossen wird ist die Excel Instanz im Task Manager immer
noch vorhanden. Wenn ich Access schließe, verschwindet auch die Excel
Instanz im Taskmanager. Daraus folgere ich, dass Access immer noch
eine Verbindung zu der geöffneten Instanz hat.

Wàre toll wenn hier jemand eine Antwort hàtte.
___

Hi Marsud,
in deinem Code fehlen das Schließen der genutzten Arbeitsmatte und das
Beenden von Excel. Außerdem arbeitest du mit der graphischen Oberflàche, was
nicht optimal ist. Besser ist es, anstelle Selction, Activate unsw. nur
Range-Objekte zu nutzen.

Viele Gruesse

Peter

Ähnliche fragen