Hello again ;D
ich habe folgenden Code:
Public Sub Auswertung()
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "Auswertung_qry", _
"C:\...\Berichte\Vorlagen\Auswertung.xlsx"
Dim xlsApp As Excel.Application
Dim xlsWb As Excel.Workbook
Set xlsApp = CreateObject("Excel.Application")
xlsApp.Visible = False
Set xlsWb = xlsApp.Workbooks.Open("C:\...\Berichte\Vorlagen\Auswertung.xlsx")
ActiveWorkbook.SaveAs FileName:= _
"C:\...\Temp\" & "Auswertung" & ".xlsx", _
FileFormat:=xlOpenXMLWorkbook, Password:="ABCDEFG", CreateBackup:=False
xlsApp.Workbooks("Auswertung.xlsx").Close SaveChanges:=False
xlsApp.Quit
Dim SourceFile, DestinationFile
SourceFile = "C:\...\Temp\Auswertung.xlsx" ' Define source file name.
DestinationFile = "C:\...\Berichte\" & Format(Now, "YYYY_MM_DD_HHMM") _
& "_Auswertung" & ".xlsx"
FileCopy SourceFile, DestinationFile
Dim objOutlook As Object
Dim objMail As Object
Set objOutlook = CreateObject("Outlook.Application")
Set objMail = objOutlook.CreateItem(0)
With objMail
.SentOnBehalfOfName = "anyone@lugundtrug.de"
.To = "someoneelse@knirzundknispel.de"
.Subject = "Auswertung"
.Body = "Trallalla"
.Attachments.Add "C:\...\Temp\Auswertung.xlsx"
.Display
End With
On Error Resume Next
Kill "C:\...\Temp\*.*"
End Sub
Grundsätzlich funktioniert der, allerdings nur einmal. Wenn ich ihn zweimal nacheinander ausführen möchte, bekomme ich diese Fehlermeldung:
"Objektvariable oder With-Blockvariable nicht festgelegt" in diesem Teil des Codes:
ActiveWorkbook.SaveAs FileName:= _
"C:\...\Temp\" & "Auswertung" & ".xlsx", _
FileFormat:=xlOpenXMLWorkbook, Password:="ABCDEFG", CreateBackup:=False
Der Code scheint mir Excel nicht ganz zu schließen, jedenfalls ist im Task Manager immer noch ein Excel-Hintergrund-Prozess offen. Wenn ich den manuell schließe, funktioniert auch der Code wieder.
Ich komme nicht drauf, was es ist - habt Ihr eine Idee, was ich falsch mache?
Und noch eine Anfänger-Bonusfrage:
Ich weise ja mehreren Variablen einen Objektverweis (hab ich das richtig gesagt?) zu (z.B. Set xlsApp = CreateObject("Excel.Application")). Ich habe mal gelesen, dass man das mit "Set ... = Nothing" rückgängig machen sollte (da war von "Aufräumen" die Rede). Ist das richtig, und wo müsste ich das einfügen? Ganz am Ende? Oder hängt genau das mit meinem Fehler zusammen?
Beste Grüße
Alex
Hallo,
hier
ActiveWorkbook.SaveAs FileName:= _
fehlt die Referenz auf das Excel-Objekt
xlsApp.ActiveWorkbook.SaveAs FileName:= _
Alle Objekte, die mit Set ... generiert wurden, sollten auch mit Set ... = Nothing wieder in passender Reihenfolge "zerstört" werden.
Hallo Franz,
allerbesten Dank mal wieder 8) . Sechs Buchstaben und einen Punkt später und der Code funktioniert. Und die Objekte hab ich gleich mit zerstört.
Viele Grüße