Senden eines Excel-Objekts aus Access mit SendObject, kein Anhang in der E-Mail
-
21-12-2019 - |
Frage
Liebe StackOverflowers,
Ich versuche, ein Excel-Objekt aus Access mit SendObject in VBA zu senden.
Ich habe den Code, der das Diagramm erstellt:
Dim oXL As Object ' Excel application
Dim oBook As Object ' Excel workbook
Dim oSheet As Object ' Excel Worksheet
Dim oChart As Object ' Excel Chart
Const cNumCols = 100 ' Number of points in each Series
Const cNumRows = 26 ' Number of Series
ReDim aTemp(1 To cNumRows, 1 To cNumCols)
Set oXL = CreateObject("Excel.application")
Set oBook = oXL.Workbooks.Add
Set oSheet = oBook.Worksheets.Item(1)
Dim rs01 As DAO.Recordset
Set rs01 = CurrentDb.OpenRecordset("SELECT * FROM qryWOperweekCombined")
Dim Teller As Integer
Teller = 0
Dim iRow As Integer
iRow = 1
Dim iCol As Integer
iCol = 5
With rs01
If .RecordCount > 0 Then
.MoveLast
TotRecords = .RecordCount
.MoveFirst
For Teller = 1 To TotRecords
aTemp(iRow, 1) = !Week
aTemp(iRow, 2) = !Total
aTemp(iRow, 3) = !companyk
aTemp(iRow, 4) = !companyv
.MoveNext
iRow = iRow + 1
Next Teller
oSheet.Range("A1").Resize(cNumRows, cNumCols).Value = aTemp
End If
End With
Set oChart = oSheet.ChartObjects.Add(200, 1, 745, 380).Chart
oChart.SetSourceData Source:=oSheet.Range("A1:D26")
oXL.Visible = True
oChart.HasLegend = True
oChart.HasTitle = True
oChart.SeriesCollection(4).ApplyDataLabels
oChart.SeriesCollection(4).DataLabels.Format.TextFrame2.TextRange.Font.Size = 7
oChart.SeriesCollection(2).ApplyDataLabels
oChart.SeriesCollection(2).DataLabels.Format.TextFrame2.TextRange.Font.Size = 7
oChart.SeriesCollection(3).ApplyDataLabels
oChart.SeriesCollection(3).DataLabels.Format.TextFrame2.TextRange.Font.Size = 7
oSheet.Columns("A:A").ColumnWidth = 18.71
oChart.SeriesCollection(1).Name = "=""Dates"""
oChart.SeriesCollection(1).XValues = "=Sheet1!$A:$A"
oChart.SeriesCollection(2).Name = "=""Total"""
oChart.SeriesCollection(2).XValues = "=Sheet1!$B:$B"
oChart.SeriesCollection(3).Name = "=""companyk"""
oChart.SeriesCollection(3).XValues = "=Sheet1!$C:$C"
oChart.SeriesCollection(4).Name = "=""companyv"""
oChart.SeriesCollection(4).XValues = "=Sheet1!$D:$D"
oChart.SeriesCollection(1).Delete
oChart.SeriesCollection(1).Name = "=""Total"""
oChart.SeriesCollection(1).XValues = "=Sheet1!$A:$A"
oChart.SeriesCollection(1).Interior.Color = vbBlue
oChart.SeriesCollection(2).Interior.Color = vbGreen
oChart.SeriesCollection(3).Interior.Color = vbRed
oChart.SeriesCollection(1).Trendlines.Add
oChart.SeriesCollection(2).Trendlines.Add
oChart.SeriesCollection(3).Trendlines.Add
oChart.SeriesCollection(1).Trendlines.Add(Type:=xlMovingAvg, Period:= _
2, Forward:=1, Backward:=0, DisplayEquation:=False, DisplayRSquared:= _
False, Name:="Average").Select
oChart.SeriesCollection(2).Trendlines.Add(Type:=xlMovingAvg, Period:= _
2, Forward:=1, Backward:=0, DisplayEquation:=False, DisplayRSquared:= _
False, Name:="Average").Select
oChart.SeriesCollection(3).Trendlines.Add(Type:=xlMovingAvg, Period:= _
2, Forward:=1, Backward:=0, DisplayEquation:=False, DisplayRSquared:= _
False, Name:="Average").Select
With oChart.SeriesCollection(1).Trendlines(1).Border
.ColorIndex = 5
.Weight = xlThick
.LineStyle = xlContinuous
End With
With oChart.SeriesCollection(1).Trendlines(2).Border
.ColorIndex = 5
.Weight = xlMedium
.LineStyle = xlContinuous
End With
With oChart.SeriesCollection(2).Trendlines(1).Border
.ColorIndex = 4
.Weight = xlThick
.LineStyle = xlContinuous
End With
With oChart.SeriesCollection(2).Trendlines(2).Border
.ColorIndex = 4
.Weight = xlMedium
.LineStyle = xlContinuous
End With
With oChart.SeriesCollection(3).Trendlines(1).Border
.ColorIndex = 3
.Weight = xlThick
.LineStyle = xlContinuous
End With
With oChart.SeriesCollection(3).Trendlines(2).Border
.ColorIndex = 3
.Weight = xlMedium
.LineStyle = xlContinuous
End With
oChart.Legend.Position = xlBottom
oChart.SetElement (msoElementChartTitleCenteredOverlay)
oChart.HasTitle = True
oChart.ChartTitle.Text = "Workorders per week - last 26 weeks"
oSheet.Visible = True
oXL.UserControl = True
Und ich habe einen Code, der eine E-Mail sendet:
Dim varName As Variant
Dim varCC As Variant
Dim varSubject As Variant
Dim varBody As Variant
varName = "name@server.com"
varCC = "name2@server2.com"
varSubject = "Hello"
varBody = "Text bla bla bla"
DoCmd.SendObject , oXL, acFormatXLS, varName, varCC, , varSubject, varBody, False, False
Wenn ich diese kombiniere, erhalte ich einen Code, der eine E-Mail sendet, aber ohne den Excel-Anhang eintrifft (außerdem wird Excel noch geöffnet, aber das werde ich später herausfinden.
Diese 2 Codes sind in 1 Sub zusammengefasst.
Irgendwelche Ideen, warum der Anhang nicht gesendet wird?Verwende ich den falschen Objektnamen (oXL), weil oSheet und oBook nicht funktionieren.Oder könnte es etwas damit zu tun haben, dass Excel noch geöffnet ist?
Lösung
SendObject
ist für Ms Access-Objekte wie eine Abfrage, ein Formular oder einen Bericht.
Sie können es auch zum Senden einer E-Mail ohne Anhang verwenden, wenn Sie die ersten beiden Parameter leer lassen.
Sie senden ein Excel-Objekt im zweiten Parameter, den der Befehl ignoriert.
Stattdessen sollten Sie ein Outlook-Objekt verwenden, um eine Excel-Datei als Anhang per E-Mail zu senden, siehe Stackoverflow-Frage hier.
Alternativ könnten Sie verwenden ShellExecute
Andere Tipps
danke viel für Ihre Hilfe.Der Beispiel-Testcode, der für mich funktioniert, lautet:
generasacodicetagpre.