Frage

Ich habe ein sehr seltsames Problem mit diesem Code.Der allgemeine Zweck besteht darin, Benutzerdaten aus einem Formular in Access in einer Tabelle in Excel zu speichern und dann mit einem E-Mail-Client eine E-Mail mit dem Tabellenanhang zu senden.Der Code lautet wie folgt

    Private Sub Send_Email_Click()

Dim MySheetPath As String
Dim Xl As Excel.Application
Dim XlBook As Excel.Workbook
Dim XlSheet As Excel.Worksheet

' Tell it location of actual Excel file
MySheetPath = "\\SERVER\Users\Public\Documents\WORK ORDERS\Blank Work Order.xlsx"

'Open Excel and the workbook
Set Xl = CreateObject("Excel.Application")
Set XlBook = GetObject(MySheetPath)

'Make sure excel is visible on the screen
Xl.Visible = True
XlBook.Windows(1).Visible = True

'Define the sheet in the Workbook as XlSheet
Set XlSheet = XlBook.Worksheets(1)

'Insert values in the excel sheet starting at specified cell
XlSheet.Range("B6") = Jobnameonform.Value
XlSheet.Range("C7") = Companynameonform.Value
XlSheet.Range("C8") = Employeename.Value
XlSheet.Range("H7") = Jobnumberonform.Value
Xl.ActiveWorkbook.Save
Xl.ActiveWorkbook.Close
Xl.Quit

'in case something goes wrong
Set Xl = Nothing
Set XlBook = Nothing
Set XlSheet = Nothing

Dim cdomsg
Set cdomsg = CreateObject("CDO.message")
With cdomsg.Configuration.Fields
    .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 'NTLM method
    .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com"
    .Item("http://schemas.microsoft.com/cdo/configuration/smptserverport") = 587
    .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
    .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
    .Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
    .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "matthewfeeney6@gmail.com"
    .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "REDACTED"
    .Update
End With
' build email parts
With cdomsg
    .To = "matthewfeeney6@gmail.com"
    .From = "matthewfeeney6@gmail.com"
    .Subject = "Test email"
    .TextBody = "Did you get the attachment?"
    .AddAttachment "\\SERVER\Users\Public\Documents\WORK ORDERS\Blank Work Order.xlsx"
    .Send
End With
Set cdomsg = Nothing

MsgBox "Completed"

End Sub

Ohne die Zeile „.AddAttachment…“ funktioniert der Code genau wie vorgesehen, abgesehen natürlich vom Senden des Anhangs.Bei dieser Zeile erhalte ich jedoch einen Laufzeitfehler 91, wobei der Debugger die Zeile „Xl.ActiveWorkbook.Save“ als problematischen Code angibt.Auch ohne den Code zum Ändern der Excel-Tabelle funktioniert der einfache E-Mail-Teil, einschließlich der Anhänge.Wenn mir jemand erklären kann, warum ich diesen Fehler erhalte, wäre das sehr hilfreich.Dank im Voraus!

BEARBEITEN:Beim erneuten Testen des Codes scheint es bei Xl.ActiveWorkbook.Save immer wieder abzustürzen. Ich dachte, dass es vorher funktioniert hat, aber ich muss mich geirrt haben

War es hilfreich?

Lösung

Sie (glauben, Sie) speichern und schließen Ihre Arbeitsmappe mit:

Xl.ActiveWorkbook.Save
Xl.ActiveWorkbook.Close

Aber das ist nicht die Arbeitsmappe, die Sie verwenden und bearbeiten XlBook:

Set XlBook = GetObject(MySheetPath)

Wenn Sie die „echte“ Arbeitsmappe speichern und schließen, XlBook:

XlBook.Save
XlBook.Close

dann sollte es funktionieren.

Der Grund, warum Sie den Fehler erhalten Save Anruf bedeutet wahrscheinlich, dass die Xl.ActiveWorkbook Objekt existiert nicht/ist null oder so.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top