Question

J'ai un problème très étrange avec ce code.L'objectif général est d'enregistrer les données utilisateur d'un formulaire dans Access dans une feuille de calcul dans Excel, puis d'utiliser un client de messagerie pour envoyer un e-mail contenant la pièce jointe de la feuille de calcul.Le code est comme suit

    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

Sans la ligne ".AddAttachment..." Le code fonctionne exactement comme prévu, sans l'envoi de la pièce jointe bien sûr.Cependant, avec cette ligne, j'obtiens une erreur d'exécution 91, le débogueur citant la ligne "Xl.ActiveWorkbook.Save" comme code problématique.De plus, sans le code permettant de modifier la feuille de calcul Excel, la simple partie e-mail fonctionne, pièces jointes incluses.Si quelqu'un peut m'expliquer pourquoi j'obtiens cette erreur, ce serait très utile.Merci d'avance!

MODIFIER:En retestant le code, il semble planter systématiquement sur Xl.ActiveWorkbook.Save. Je pensais que cela fonctionnait auparavant, mais j'ai dû me tromper

Était-ce utile?

La solution

Vous (pensez que vous) enregistrez et fermez votre classeur avec :

Xl.ActiveWorkbook.Save
Xl.ActiveWorkbook.Close

mais ce n'est pas le classeur que vous utilisez et manipulez, qui est XlBook:

Set XlBook = GetObject(MySheetPath)

Si vous enregistrez et fermez le "vrai" classeur, XlBook:

XlBook.Save
XlBook.Close

alors ça devrait marcher.

La raison pour laquelle vous obtenez l'erreur au Save l'appel signifie probablement que le Xl.ActiveWorkbook l'objet n'existe pas/est nul ou quelque chose du genre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top