2015-11-30 1 views
-1

Mon code fonctionnait correctement jusqu'à ce que les pièces jointes apparaissent.Ajout de pièces jointes Outlook dans VBA

Ce que j'essaie de faire.

  1. Toutes les adresses e-mail sont dans la colonne B.
  2. Dans la colonne C il y a des chemins de fichiers ainsi que les noms de fichiers à côté de l'adresse e-mail. (C: \ desktop \ test.xlsm)
  3. J'essaie d'automatiser le processus d'envoi de courriels à ces adresses avec ces pièces jointes. Un formulaire utilisateur apparaît qui invite tout CC, sujet, texte pour les courriels de masse.

Voici le code

Dim SendTo As String 
Dim Atmt As String 
Dim ToMSg As String 

    For i = 2 To LastRow 
     Atmt = ThisWorkbook.Sheets(1).Cells(i, 3).Value 

     SendTo = ThisWorkbook.Sheets(1).Cells(i, 2) 
      If SendTo <> "" Then 
       ToMSg = DraftBox.Value 
       Send_Mail SendTo, ToMSg 
      End If 

    Next i 

    Unload Me 

End Sub 


Sub Send_Mail(SendTo As String, ToMSg As String) 
    Dim OutlookApp As Object 
    Dim OutlookMail As Object 

    Set OutlookApp = CreateObject("Outlook.Application") 
    Set OutlookMail = OutlookApp.CreateItem(0) 


    With OutlookMail 
     .To = SendTo 
     .CC = CC.Value 
     .BCC = BCC.Value 
     .Subject = Subject.Value 
     .Body = ToMSg 
 .attachments.add Atmt 
 .Send 

Je joins le code correspondant. Il ne cesse de me dire que Atmt est vide. S'il vous plaît aider ..

+0

Vous ne l'avez pas inclus en tant que paramètre. – findwindow

+0

pièces jointes? J'ai .. Il me dit qu'aucune source de données n'a été fournie. Mais quand je copie coller le chemin du fichier + nom de fichier, il envoie l'e-mail avec la pièce jointe –

+0

Quelque chose semble manquer ici? 'Sub Send_Mail (SendTo en tant que chaîne, ToMSg As String)' Edit: avez-vous écrit ce code ??? Edit2: manquant de l'appel aussi bien évidemment. – findwindow

Répondre

0

Dans le Send_Mail sous vous devez inclure un argument pour passer le chemin de fixation:

Sub Send_Mail(SendTo As String, ToMSg As String, Atmt as String) 

Ensuite, lorsque vous appelez la Send_Mail sous, passer l'argument que vous voulez fournir:

Send_Mail SendTo, ToMSg, Atmt 

Le fait que j'ai utilisé Atmt était complètement arbitraire et basé sur votre exemple. Vous pouvez appeler la chaîne n'importe quel nom dans votre sous-marin.

Vous pouvez également le faire fonctionner en déclarant Atmt comme une variable Global ou Public en dehors de la portée d'une Sub spécifique. Il est actuellement déclaré dans le premier sous-marin et donc lorsque vous essayez de l'utiliser dans le sous-Send_Mail, la variable est inconnue à ce sous-marin, de sorte qu'il vous indique qu'il est vide.

Je préférerais cependant plus pour la première méthode.

+0

merci! J'accepte la réponse en 7 minutes. –