Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Automatischer Versand von PDF aus einem Dateiordner

Frage Internet E-Mail

Mitglied: Axel62

Axel62 (Level 1) - Jetzt verbinden

06.02.2012 um 15:22 Uhr, 3382 Aufrufe, 9 Kommentare

Hallo allerseits,
ich Programmmiere VBA für Access und muss nun VBA für Outlook programmieren. Letzteres leider zum ersten Mal und benötige etwas Hilfe.

In einem Verzeichnis liegen jeweils zwei zusammegehörende Dateipaare. Z. B. Rechnung_1234.pfd und Rechnung_1234.otl. Zuerst genannte Datei soll aus einem Outlookmakro (2003 und höher) automatisch an eine neu zu erstellende E-Mail angehängt und verschickt werden. Dieses Makro gilt es zu Erstellen.

In der Rechnung_1234.otl finden sich durch '~' getrennt, E-Mailempfänger, Betreff und der E-Mailtext.

Nach dem Versand können beide Dateien gelöscht werden und es soll das nächste Dateiepärchen ausgelesen und versendet werden, bis alle Dateipaare abgearbeitet, d. h. alle PDF-Dateien an die entsprechenden Emailempfänger versendet wurden.

Kann mir jemand einen groben Plan geben, wie ich das anstelle?

Vielen Dank im voraus und viele Grüße

Axel
Mitglied: Pjordorf
06.02.2012 um 21:20 Uhr
Hallo,

Zitat von Axel62:
Kann mir jemand einen groben Plan geben, wie ich das anstelle?
Warum? Den groben Plan hast du doch selbst schon erstellt. Steht doch oben drin. Wenn du gezielt Probleme hast frage (evtl. mit zugeöhrigem Quellcodeschnippsel) und dir wird bestimmt geholfen.

Gruß,
Peter
Bitte warten ..
Mitglied: Axel62
07.02.2012 um 08:13 Uhr
Guten Morgen Peter,

ja, wie gesagt ich habe noch nie im Outlook programmiert.

Wenn ich die Dateien in einer Schleifde eingelesen habe und die *.otl in die einzelnen Bestandteile zerlegt habe, weiß ich nicht, wie ich eine neue E-Mail anlege, d. h. wie ich die Felder Empfänger, Betreff, E-Mailtext anspreche und wie ich die entsprechende PDF-Datei anhänge und verschicke. Was ist mit einer im Outlook vorbelegten Signatur? Wird die automatisch übernommen? Kann ich die unterdrücken?

Das sind Fragen über die ich mir bei Access keine Gedanken machen musste.

Viele Grüße

Axel
Bitte warten ..
Mitglied: Pjordorf
07.02.2012 um 09:21 Uhr
Hallo,

Zitat von Axel62:
ja, wie gesagt ich habe noch nie im Outlook programmiert.
Das ist doch kein problem

weiß ich nicht, wie ich eine neue E-Mail anlege, d. h. wie ich die Felder Empfänger, Betreff, E-Mailtext anspreche und wie ich die entsprechende PDF-Datei anhänge und verschicke.
Im VBA Editor mal die F1 benutzt? Oder mal hier geschaut http://support.microsoft.com/kb/161088 Weiterhin gibt es noch Lektüre in Buchform. Sogar MS selbst hat da einiges.an Hilfe anzubieten http://msdn.microsoft.com/en-us/library/ee814736.aspx

Gruß,
Peter
Bitte warten ..
Mitglied: Axel62
07.02.2012 um 15:47 Uhr
Hallo Peter,

hier nun der VBCode.

Private Sub cmdStart_Click()

Dim olApp As Outlook.Application
Dim olInspector As Outlook.Inspector
Dim objMail As Outlook.MailItem

Dim DateiMuster As String
DateiMuster = strFolder & "*.otl"

Dim DateiInhalt As String
Dim EMail(3) As String
Dim Vergleichsmuster As String

Dim DateiNr As Integer
Dim AnzMail As Long
Dim BLaenge As Long
Dim I As Long

Dim myattachments As Variant

If strFolder <> "" Then
Set olApp = CreateObject("Outlook.Application")
Set objMail = olApp.CreateItem(olMailItem)
Set myattachments = objMail.Attachments

Label2.Visible = True
strFile.Visible = True
NeueDatei:
Vergleichsmuster = Dir(DateiMuster)

If Vergleichsmuster <> "" Then
strFile = Vergleichsmuster ' Dateinamen anzeigen
DateiNr = FreeFile
BLaenge = FileLen(strFolder & Vergleichsmuster)
Open strFolder & Vergleichsmuster For Binary As DateiNr
DateiInhalt = String(BLaenge, " ")
Get DateiNr, 1, DateiInhalt

BLaenge = 0 ' Felder trennen
BLaenge = InStr(1, DateiInhalt, "~", vbTextCompare)

If BLaenge > 0 Then
EMail(1) = Left(DateiInhalt, BLaenge - 1) ' E-Mailadresse
DateiInhalt = Right(DateiInhalt, Len(DateiInhalt) - BLaenge)

BLaenge = 0
BLaenge = InStr(1, DateiInhalt, "~", vbTextCompare)

If BLaenge > 0 Then
EMail(2) = Left(DateiInhalt, BLaenge - 1) ' E-Betreff
EMail(3) = Right(DateiInhalt, Len(DateiInhalt) - BLaenge) ' Mailinhalt
Else
MsgBox "Fehlerhafter Dateiinhalt! Bitte korrigieren Sie die Datei und starten die Verarbeitung erneut.", vbCritical, "Fehler"
Close DateiNr
End If
Else
MsgBox "Fehlerhafter Dateiinhalt! Bitte korrigieren Sie die Datei und starten die Verarbeitung erneut.", vbCritical, "Fehler"
Close DateiNr
End If

objMail.To = EMail(1)
objMail.Subject = EMail(2)
objMail.Body = EMail(3)
myattachments.Add strFolder & Left(Vergleichsmuster, Len(Vergleichsmuster) - 3) & "pdf"

Set olApp = Nothing
Set olInspector = Nothing
Set objMail = Nothing

Close DateiNr
' Kill Vergleichsmuster
' kill left(vergleichsmuster, len(vergleichsmuster)-3) & "pdf"
GoTo NeueDatei
Else
If AnzMail = 0 Then
MsgBox "Es wurden keine Dateien zur E-Mailversendung gefunden! ", vbInformation, "Hinweis"
Else
MsgBox "Fertig. Es wurden " & AnzMail & " E-Mails versendet. ", vbInformation, "Hinweis"
End If
End If
Else
MsgBox "Fehler bei der Initialisierung. Es wurde kein Pfad gefunden.", vbCritical, "Fehler"
End If

Ende:
frmStart.Hide

End Sub

Die Routine wird einmal durchlaufen, jedoch wird keine Email erzeug und versendet. Beim 2. Druchlauf tritt Fehler 91 auf. Vielleicht siehst Du was hier falsch läuft?

Gruß

Axel
Bitte warten ..
Mitglied: Pjordorf
07.02.2012 um 16:59 Uhr
Hallo,

Zitat von Axel62:
hier nun der VBCode.
Setze den Code doch bitte in code tags. Siehe dazu die Formatierungshilfe!
Beispiel:
01.
If AnzMail = 0 Then 
02.
     MsgBox "Es wurden keine Dateien zur E-Mailversendung gefunden! ", vbInformation, "Hinweis" 
03.
Else 
04.
     MsgBox "Fertig. Es wurden " & AnzMail & " E-Mails versendet. ", vbInformation, "Hinweis" 
05.
End If
Das kann dan wenigstens besser gelesen werden.

Die Routine wird einmal durchlaufen, jedoch wird keine Email erzeug und versendet
Haltepunkte und Variablen lässt du dir schon beim anzeigen, oder? Und was ist bei einzelschritt abarbeitung?

Beim 2. Druchlauf tritt Fehler 91 auf.
Da du dein Office nicht nennst noch auf welchem OS du das ganze machst, hilft vielleicht dies hier (Das ist in Access aber nicht anders und dort der gleiche Fehler inklusive des dazu gehörigen fehlertexts) http://support.microsoft.com/kb/146864

Vielleicht siehst Du was hier falsch läuft?
Äh, nein. Ich zähle noch deine ganzen If else then's auseinander. Hast du schonb mal was von Strukturierter Programmierung oder Einrücken gehört? Das kann doch keiner lesen.

Gruß,
Peter
Bitte warten ..
Mitglied: Axel62
07.02.2012 um 21:06 Uhr
Guten Abend Peter,

sorry, aber wenn beim Copy & Paste die Formatierung flöten geht, ist das nicht unbedingt meine Schuld.
Bitte warten ..
Mitglied: Pjordorf
08.02.2012 um 14:02 Uhr
Hallo,

Zitat von Axel62:
sorry, aber wenn beim Copy & Paste die Formatierung flöten geht
Deshalb gibt es ja auch die Code Tags. Schau mal in der Formatierungshilfe ren. Code Tags kannst du auch nachträglich noch hinzufügen.

Gruß,
Peter
Bitte warten ..
Mitglied: Pjordorf
08.02.2012 um 16:04 Uhr
Hallo,

Zitat von Axel62:
Die Routine wird einmal durchlaufen, jedoch wird keine Email erzeug und versendet
Die Mail wird doch mit deinem Code unten erzeugt. Zum senden noch ein .Send hinzufügen. Siehe unten
01.
            objMail.To = EMail(1) 
02.
            objMail.Subject = EMail(2) 
03.
            objMail.Body = EMail(3) 
04.
            myattachments.Add strFolder & Left(Vergleichsmuster, Len(Vergleichsmuster) - 3) & "pdf" 
05.
            objMail.Send
Beim 2. Druchlauf tritt Fehler 91 auf
Klar. Du setzt ja deine Objeckte auf Nothing. Entweder lassen oder neu zuweisen.
01.
            Set olApp = Nothing 
02.
            Set olInspector = Nothing 
03.
            Set objMail = Nothing
Anstelle von Sprungmarken (brrr) lieber Schleifen mit Bedingungen benutzen. Ist in deinem Code ganz leicht möglich.
01.
            GoTo NeueDatei
Ist ein NoGo. Sowie das dazugehörige
01.
NeueDatei:
Löschen. Und dazu noch innerhalb einer IF Anweisung!

Nutze lieber ein Do ... Loop
Do...Loop-Anweisung 
 
Wiederholt einen Block mit Anweisungen, solange eine Bedingung den Wert True hat oder bis eine Bedingung den Wert True erhält. 
 
Syntax 
 
Do [{While | Until} Bedingung] 
[Anweisungen] 
[Exit Do] 
[Anweisungen] 
 
Loop 
 
Sie können auch die folgende, ebenfalls zulässige Syntax verwenden: 
 
Do 
[Anweisungen] 
[Exit Do] 
[Anweisungen] 
 
Loop [{While | Until} Bedingung] 
 
Die Syntax für die Do Loop-Anweisung besteht aus folgenden Teilen: 
 
Teil Beschreibung  
Bedingung Optional. Numerischer Ausdruck oder Zeichenfolgenausdruck, der entweder True oder False ergibt. Hat Bedingung den Wert Null, so wird Bedingung als False interpretiert.  
Anweisungen Eine oder mehrere Anweisungen, die wiederholt werden, solange oder bis Bedingung True wird.  
 
Bemerkungen 
 
Innerhalb einer Do…Loop-Anweisung kann eine beliebige Anzahl von Exit Do-Anweisungen an beliebiger Stelle als Alternative zum Verlassen einer Do…Loop-Anweisung verwendet werden. Exit Do wird oft in Zusammenhang mit der Auswertung einer Bedingung (zum Beispiel If...Then) eingesetzt und hat zur Folge, daß die Ausführung mit der ersten Anweisung im Anschluß an Loop fortgesetzt wird. 
 
In verschachtelten Do...Loop-Anweisungen übergibt Exit Do die Steuerung an die Schleife der nächsthöheren Verschachtelungsebene.
Gruß,
Peter
Bitte warten ..
Mitglied: Axel62
09.02.2012 um 08:31 Uhr
Moin Peter,

vielen Dank für Deine Hilfe. Ich habe Deine Änderungen vorgenommen, ein Errorhandling eingefügt und nun gehen die Mails raus, das ist super.

Vielen Dank für Deine Hilfe.

Viele Grüße
Axel
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Entwicklung
Automatischer PDF Druck auf spezifischen Drucker (4)

Frage von Orvqb99d5E2U zum Thema Entwicklung ...

Windows Tools
Automatischer FTP-Upload ohne angemeldeten Benutzer (5)

Frage von SarekHL zum Thema Windows Tools ...

Sonstige Systeme
PDF-Formulare mit handschriftlicher Unterschrift (19)

Frage von FenjaW zum Thema Sonstige Systeme ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (22)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...