Domanda

Sto avendo un problema molto strano con questo codice.Lo scopo generale è quello di salvare i dati dell'utente da un modulo in accesso a un foglio di calcolo in Excel, quindi utilizzare un client di posta elettronica per inviare un'e-mail contenente l'allegato del foglio di calcolo.Il codice è il seguente

    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
.

Senza la linea ".Addattachment ..." Il codice funziona esattamente come previsto, meno inviando l'allegato, ovviamente.Tuttavia, con quella linea, ottengo un errore di runtime 91, con il debugger che cita la linea "xl.activeworkbook.save" come codice problematico.Inoltre, senza il codice per modificare il foglio di calcolo Excel, la semplice porzione di posta elettronica funziona, gli allegati inclusi.Se qualcuno può fornire intuizione sul motivo per cui ricevo questo errore, sarebbe molto utile.Grazie in anticipo!

Modifica: ripristinare il codice, sembra costantemente crash su xl.activeworkbook.Save Ho pensato che ha funzionato prima, ma devo essere sbagliato

È stato utile?

Soluzione

Tu (pensati) stanno salvando e chiudendo la cartella di lavoro con:

Xl.ActiveWorkbook.Save
Xl.ActiveWorkbook.Close
.

Ma questa è la cartella di lavoro che stai usando e manipolando, che è XlBook:

Set XlBook = GetObject(MySheetPath)
.

Se salvi e chiudi la cartella di lavoro "reale", XlBook:

XlBook.Save
XlBook.Close
.

Allora dovrebbe funzionare.

Il motivo per cui stai ricevendo l'errore nella chiamata Save probabilmente significa che l'oggetto Xl.ActiveWorkbook non esiste / è nullo o qualcosa del genere.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top