Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Mail mit Anhang aus VBA

Begonnen von thorstens1304, August 05, 2011, 09:46:48

⏪ vorheriges - nächstes ⏩

thorstens1304

Hallo,

wie kann ich über ein VBA Script eine Mail inklusive einer Excel Datei im Anhang versenden?

database

Hallo,

Wenn du auf der Seite mit deinem Beitrag nach unten scrollst kommt folgendes zum Vorschein ... ;)

http://www.access-o-mania.de/forum/index.php?topic=4167.0

HTH



thorstens1304

Hallo,

erst einmal Danke für den Hinweis. Leider kriege ich in der Zeile:

Dim ool As Outlook.Application

den Fehler "Benutzerdefinierter Typ nicht definiert". Was muss ich ändern?

database

Hallo,

du musst im VB-Editor unter Extras Verweise einen Verweis auf die 'Microsoft Outlook xx.0 Object Library' setzen

xx steht für deine Verwendetet Office-Version (10, 11, 12, 14)

HTH

thorstens1304

Aah Danke. der Fehler ist weg. Ein kleines Problem noch: Die Mail wird geöffnet aber nicht versandt. Wie kriege ich die noch automatisch versendet?

Public Function SendMail(Empfaenger, Anhang, Betreff As String)
  Dim ool As Outlook.Application
  Dim oMail As Outlook.MailItem
'Anhang
  Dim myattachments As Variant


  ' Verweis zu Outlook + neue Nachricht
  Set ool = CreateObject("Outlook.Application")
  Set oMail = ool.CreateItem(olMailItem)
  Set myattachments = oMail.Attachments

  ' Befreff-Zeile
  oMail.Subject = Betreff

  ' An-Zeile (Empfänger)
  oMail.To = Empfaenger
  oMail.Display

  ' Texteingabe (Nachricht selbst)
  oMail.Body = "Hallo, anbei finden Sie die Kundendaten zu den Ihnen aktuell übersandten Lizenzbestellungen."
           
           
  myattachments.Add Anhang
End Function

Jonny

Hallo versuch es mal hiermit:

SendKeys "%s"

am Ende der Function.

Gruß

Johann


database

Hallo,

im Code steht ja auch, dass sie angezeigt werden soll  --->   oMail.Display
Von Senden ist da nix ...   ;)

versuch mal so:


Public Function SendMail(Empfaenger, Anhang, Betreff As String)
 Dim ool As Outlook.Application
 Dim oMail As Outlook.MailItem
'Anhang
 Dim myattachments As Variant


 ' Verweis zu Outlook + neue Nachricht
 Set ool = CreateObject("Outlook.Application")
 Set oMail = ool.CreateItem(olMailItem)
 Set myattachments = oMail.Attachments

 ' Befreff-Zeile
 oMail.Subject = Betreff

 ' An-Zeile (Empfänger)
 oMail.To = Empfaenger
 ' Texteingabe (Nachricht selbst)
 oMail.Body = "Hallo, anbei finden Sie die Kundendaten zu den Ihnen aktuell übersandten Lizenzbestellungen."
                 
 myattachments.Add Anhang

'-------- Mail versenden -----
 oMail.Send
'----------------------------------

End Function



HTH

Klaus S. aus B

Hallo zusammen,

ich hänge bei dieser Sache. Der Code funktioniert soweit außer dass es mit den Anhang aus dem Datensatz nicht anfügt, sondern einen Fehler produziert.
ZitatLaufzeitfeler '440' Die Dateianlage kann nicht hinzugefügt werden. Es wurde keine Datenquelle bereitgestellt.

Wenn ich im Code eine Datei direkt angebe "C:\temp\xxx.pdf" funktioniert es. Also stimmt wohl irgendwas mit dem Verweis auf das Feld "Anlage" nicht. Ich habe es auch schon mit anlage.Value, Anlage.FileData und Anlage.FileName versucht, aber das funktioniert auch nicht.

Mein Code als Sub (bin zu blöd eine public function aufzurufen)  ;)
Private Sub Befehl19_Click()

Dim Empfaenger, Anlage, Betreff As String
   Dim ool As Outlook.Application
  Dim oMail As Outlook.MailItem
'Anhang
  Dim myattachments As Variant


  ' Verweis zu Outlook + neue Nachricht
  Set ool = CreateObject("Outlook.Application")
  Set oMail = ool.CreateItem(olMailItem)
  Set myattachments = oMail.Attachments

  ' Befreff-Zeile
  oMail.Subject = Betreff

  ' An-Zeile (Empfänger)
  oMail.To = Empfaenger
  oMail.Display

  ' Texteingabe (Nachricht selbst)
  oMail.Body = "Hallo, anbei finden Sie die Kundendaten zu den Ihnen aktuell übersandten Lizenzbestellungen."
           
           
  myattachments.Add Anlage
 

End Sub


Bin ratlos!
Gruß
Klaus

DF6GL

#8
Hallo,

"Anlage"  ist eine Variant-Variable und nirgends initialisiert/gesetzt... Was soll da angehängt werden?


Außerdem wäre es besser "Empfaenger" und "Anlage" als vom Datentyp TEXT zu deklarieren.

Wenn der Dateiname für die EMail-Anlage aus einem Anlage-Feld in einer Tabelle stammt, dann muss mit z. B. der Recordset-Eigenschaft des Anlage-Feldes der eigentliche Dateiname extrahiert und einer String-Variablen zugewiesen werden, die wiederum bei der .Add-Methode benutzt wird.


Wenn "Betref"f und "Empfaenger" (evtl. gebundene)  Form-Textfelder sind , dann wäre syntaktischer eher so zuschreiben:

oMail.Subject = nz(Me!Betreff,"kein Betreff")

Klaus S. aus B

Hallo,

jetzt offenbahrt sich, dass ich von VBA keine Ahnung habe.

Ich dachte "...as String" ist gleich mit "Text" (gibt übrigens eine Fehlermeldung).

Ich habe das Feld mal umbenannt in Anhang (um es deutlich vom Typ zu unterscheiden) und dem Feld den Dateinamen zugewiesen (das klappt auch), aber ich bekomme trotzdem einen Fehler.
Zitat(Die Datein kann nicht gefunden werden. Überprüfen sie den Pfad und Dateinamen.)

Private Sub Befehl19_Click()

Dim Empfaenger, Betreff, Anhang As String
   Dim ool As Outlook.Application
  Dim oMail As Outlook.MailItem
'Anhang
  Dim myattachments As Variant

...
           
  Anhang = Me.Anlage.FileName
             
  myattachments.Add Anhang
 


End Sub


...das mit dem Recordset habe ich nicht verstanden.

Gruß
KLaus

DF6GL

Hallo,

irgendwie geht es aneinander vorbei..



Private Sub Befehl19_Click()

Dim txtEmpfaenger As String, txtBetreff as String, txtAnhang As String
   Dim ool As Outlook.Application
  Dim oMail As Outlook.MailItem
'Anhang
  Dim myattachments As Object...
  Dim rs as Dao.Recordset
set rs = Me!Anlage.Value       
  txtAnhang = rs(0)!FileName  'evtl. noch Filetype berücksichtigen
  .
.
.           
  myattachments.Add txtAnhang
 


End Sub

Klaus S. aus B

HAllo Franz,

habe jetzt Deinen Code versucht.

Allerding bleibt er bei
"Set rs = Me!Anlage.Value" hängen mit der Fehlermeldung: "Objekt unterstützt diese Eigenschaft oder Methode nicht"

???

Gruß
Klaus

DF6GL

Hallo,

sollte bei nur einem Eintrag im Anlagefeld auch so gehen:

Private Sub Befehl19_Click()

Dim txtEmpfaenger As String, txtBetreff as String, txtAnhang As String
   Dim ool As Outlook.Application
  Dim oMail As Outlook.MailItem
'Anhang
  Dim myattachments As Object...
.

  txtAnhang = Me!Anlage.Filename
.
.           
  myattachments.Add txtAnhang
 


End Sub

Klaus S. aus B

Hallo Franz,

funktioniert leider auch nicht.

Die Variabel hat den korrekten Wert "xyz.pdf", aber die Prozedur bleibt bei

myattachments.Add txtAnhang  mit der Fehlermeldung "(Die Datein kann nicht gefunden werden. Überprüfen sie den Pfad und Dateinamen.)" hängen.

Der Dateiname stimmt ja mal, aber ich habe ja keinen Pfad (ist ja im Datensatz gespreichert).

Gruß
KLaus

DF6GL

Hallo,


ja, da gibt es tatsächlich das Problem, das das Attachment aus einer real gespeicherten Datei bestehen muss. Insofern muss, wenn die Anlage das Datei-Objekt (Dateiinhalt) enthält und nicht (auch) als Datei in irgendeinem Verzeichnis der Festplatte liegt , dieses Datenabbild  erst in eine Festplatten-Datei geschrieben (exportiert) werden. 

Google mal nach

Function Restoreblob