VBA: Speichern und senden

Mahlzeit miteinander!

In einem Word Dokument(Formular) habe ich einen CommandButton1
eingefügt um das Dokument
a) zu speichern.
b) zu Versenden über Outlook (vorzubereiten).

zu a) kein Problem
zu b) mit dem Befehl ActiveDocument.sendmail komme ich nicht weiter,
da als Empfänger „Mustermann“ und als Betreff „Ausgleich“ an Outlook
übermittelt werden soll.

Kann man da was machen?

Grüße
Peter

Private Sub CommandButton1_Click()
ActiveDocument.SaveAs „C:\Dokumente und Einstellungen\Peter\Lokale
Einstellungen\Temp\test“

End Sub

Hi Peter!
Stell doch eine Verbindung mit Outlook her, erstelle eine neue Mail und füge dein gespeichertes Dokument als Anhang an.
Weißt du, wie das geht? Ansonsten suche ich entsprechenden Code raus.

Viele Grüße,
Julia

Hallo Julia!
Das hört sich gut an!
Kannst Du den Code heraussuchen und mir geben?
Grüße
Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Peter,
versuch folgendes:

Dim olApp As Outlook.Application
Dim newMail As Outlook.MailItem

Set olApp = New Outlook.Application
Set newMail = olApp.CreateItem(olMailItem)

newMail.Attachments.Add „pfadname\deineDatei.doc“
newMail.Recipients.Add „Empfängeradresse“
newMail.Subject = „Betreff“

newMail.Send

Set newMail = Nothing

Wenn du Outlook danach schließen willst:
olApp.Quit

Dann noch über Extras -> Verweise den Verweis auf Microsoft Outlook 10.0 (oder 9.0, je nachdem, welche Version du hast) und es müßte klappen. Falls nicht, melde dich doch nochmal.

Viele Grüße,
Julia

Hallo du,

ich hatte vor einigen Tagen genau das selbe Problem:
Ich wollte das geöffnete Dokument mit OL an eine feststehende Email-Adresse senden.

Irgendwie hat das mit dem Sendmail u.s.w. alles nicht geklappt: die Benutzer mussten zahllose Sicherheits-Abfragen bestätigen und zum Schluss stand die Empfänger-Adresse mehrmals im An-Feld und der Datei-Anhang … naja, reden wir nicht mehr davon, denn ich habs hin bekommen!

Hier der Code im Bereich meiner Userform (Word 2000). Ist zwar nicht die feine Englische, aber es läuft!

######################################
Private Sub Email_senden()
'Alles fein deklarieren, gelle
Dim file As String, Ret
Dim filepath, filename As Object
Dim AppID

'Hier lass ich das Form schon verschwinden, alles andere geht ohne
'Benutzer-Eingaben
Unload usrMailSenden
filepath = ActiveDocument.AttachedTemplate.Path
Set filename = ActiveDocument

'Folgende Zeile nicht vergessen, da OL die Datei sonst nicht findet
'OL will halt den ganzen Pfad wissen…
file = filepath & „“ & filename

'Sollte schon eine „Neue Nachricht“ geöffnet sein, gehe zu…
If FindWindow(vbNullString, „Unbenannte Nachricht“) Then GoTo SKGo
AppID = Shell(„C:\Programme\Microsoft Office\OFFICE11 _
\OUTLOOK.EXE /c ipm.note“, 1) ’ & filepath & „“ & filename
DoEvents
'OL braucht eine Zeit zum Starten. Daher:
While Not FindWindow(vbNullString, „Unbenannte Nachricht“) 0
DoEvents
Wend
DoEvents

SKGo:

'Empf.-Adresse eintragen
SendKeys usrWBAssistentMail.txtAn.Value
DoEvents

'zum Betreff-Feld wechseln
SendKeys „{TAB}{TAB}{TAB}{TAB}“
DoEvents

'Dateiname als Betreff eintragen
SendKeys filename
DoEvents
SendKeys „{TAB}“
DoEvents
SendKeys usrWBAssistentMail.txtNachr.Value
DoEvents

'Anlage einfügen
Selection.InsertFile filename:="" & file & „“, Attachment:=True
DoEvents

'Email senden
SendKeys „%s“ 'ALT+S ('Senden)
DoEvents

MsgBox „Ihre Nachricht wurde gesendet.“ & vbCrLf & vbCrLf & _
„Bitte überprüfen Sie den Ordner ‚Gesendet‘ in MS Outlook!“, _
vbOKOnly, „Email senden“

'Userform entladen
Unload Me

######################################################################

Also, bei mir funktionierts. Im Editor unter Extras-Verweise die MS Outlook x.0 Object Library aktivieren nicht vergessen!

Hoffe geholfen zu haben,

viel Erfolg,

liebe Grüße,

Murphy

Hallo Murphy,

die Verwendung von SendKeys ist recht gefährlich, da Du genau wissen musst, was beim Öffnen der neuen Nachricht gerade aktiv ist, wie viele TAB-Stops Du „drücken“ musst und vor allem muss das Fenster aktiv und im Vordergrund sein! Wenn Du schon den Verweis zur Objektlibrary setzt, kannst Du auch die Objekte direkt ansprechen, wie von Julia sehr schön dargestellt (http://www.wer-weiss-was.de/cgi-bin/forum/showarticl…).

Das hat den Vorteil, dass Du das ganze auch im Hintergrund ablaufen lassen kannst und nebenbei noch ganz normal arbeiten/spielen/surfen kannst :smile:

Ach ja: Und Sprungmarken sollten auch der Vergangenheit angehören :wink:

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Surfin Willy,

schöner Name übrigens… ich stell mir das grad bildlich vor *fg*

Zur Sache:
Das mit den Sendkeys ist eine nur für EINEN PC gemachte Notlösung.
Meine Probleme mit anderen, sicherlich zeitgemäßeren oder einfach programmiertechnisch eleganteren Lösungen a la .sendmail waren:

1.) Es mussten Sicherheits-Meldungen bestätigt werden. Dies wäre zwar nicht MEIN Problem gewesen (außer die Fehlerabfangroutinen im MB-Bereich zu coden *g*), hätte mir aber das Prädikat „Thema verfehlt“ eingebracht. Denn Ziel MEINER Userform(s) ist es ja, die - meist gleichen - Benutzereingaben zu automatisieren.

2.) Ich konnte entweder nicht an zwei Empfänger gleichzeitig senden, kein Attachment anfügen oder OL hat einfach nichts gesendet. Warum auch immer.

Ich hatte ja … (kann jetzt nicht schauen wie der Fragensteller heißt) auch ausdrücklich darauf hingewiesen, dass das BEI MIR funktioniert und ich HOFFE, dass es auch BEI IHM funktioniert. GARANTIERT hab ich das ja nie… (ich erinnere mich grad mit Grausen an die vielen Stunden, die ich allein DAMIT verstreichen lassen musste).

Wenn du magst, kannst du ja gern versuchen, o.a. Code zu optimieren/umzuschreiben/wie-auch-immer-abzuändern.
Ziel: Die auf der geöffneten Vorlage basierende Datei soll an zwei verschiedene, aber täglich gleiche Empfänger als Anhang gesendet werden. Betreff ist der Dateiname der basierend auf der Vorlage schon vorher gespeicherten, geöffneten Datei.
Wie du vielleicht sehen kannst, übergebe ich Variablen von einer Sub zur nächsten über die .Tag-Eigenschaften div. Objekte. Falls es da eine professionellere Lösung gibt, dann sag es mir bitte. Nach Möglichkeit nicht in Modulen, da die ja meines Wissens nach über Extras-Makros zu sehen sind, also angreifbar.

Das Ganze muss auf einem Windows2000-Rechner und OL2003 und Benutzer-Rechten (kein Admin) laufen. Ich kann also KEINE Zusatztools installieren, die mir ganzschnellallesicherheitsmeldungenwegklicken. :-/
P.S. Kann ich zwar, aber DARF ich nicht. ;->

Sollten noch Fragen offen sein: einfach posten.

Liebe Grüße aus Berlin,

Murphy2ooo

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Julia!
Vielen Dank für das Heraussuchen!
Aus welchem Buch hast Du das?

Schönes WE!
Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Surfin Willy und Murphy2ooo und vielen lieben Dank!
Habe schon mal versucht Deine Programm einzubinden. Leider erfolglos.
Wie bist auf das skript gekommen?
Werde es weiter versuchen ud dich vielleicht noch mal um Hilfe bitten
müssen!

Grüße
Peter

Hallo Surfin Willy,

schöner Name übrigens… ich stell mir das grad bildlich vor
*fg*

Zur Sache:
Das mit den Sendkeys ist eine nur für EINEN PC gemachte
Notlösung.
Meine Probleme mit anderen, sicherlich zeitgemäßeren oder
einfach programmiertechnisch eleganteren Lösungen a la
.sendmail waren:

1.) Es mussten Sicherheits-Meldungen bestätigt werden. Dies
wäre zwar nicht MEIN Problem gewesen (außer die
Fehlerabfangroutinen im MB-Bereich zu coden *g*), hätte mir
aber das Prädikat „Thema verfehlt“ eingebracht. Denn Ziel
MEINER Userform(s) ist es ja, die - meist gleichen -
Benutzereingaben zu automatisieren.

2.) Ich konnte entweder nicht an zwei Empfänger gleichzeitig
senden, kein Attachment anfügen oder OL hat einfach nichts
gesendet. Warum auch immer.

Ich hatte ja … (kann jetzt nicht schauen wie der
Fragensteller heißt) auch ausdrücklich darauf hingewiesen,
dass das BEI MIR funktioniert und ich HOFFE, dass es auch BEI
IHM funktioniert. GARANTIERT hab ich das ja nie… (ich
erinnere mich grad mit Grausen an die vielen Stunden, die ich
allein DAMIT verstreichen lassen musste).

Wenn du magst, kannst du ja gern versuchen, o.a. Code zu
optimieren/umzuschreiben/wie-auch-immer-abzuändern.
Ziel: Die auf der geöffneten Vorlage basierende Datei soll an
zwei verschiedene, aber täglich gleiche Empfänger als Anhang
gesendet werden. Betreff ist der Dateiname der basierend auf
der Vorlage schon vorher gespeicherten, geöffneten Datei.
Wie du vielleicht sehen kannst, übergebe ich Variablen von
einer Sub zur nächsten über die .Tag-Eigenschaften div.
Objekte. Falls es da eine professionellere Lösung gibt, dann
sag es mir bitte. Nach Möglichkeit nicht in Modulen, da die ja
meines Wissens nach über Extras-Makros zu sehen sind, also
angreifbar.

Das Ganze muss auf einem Windows2000-Rechner und OL2003 und
Benutzer-Rechten (kein Admin) laufen. Ich kann also KEINE
Zusatztools installieren, die mir
ganzschnellallesicherheitsmeldungenwegklicken. :-/
P.S. Kann ich zwar, aber DARF ich nicht. ;->

Sollten noch Fragen offen sein: einfach posten.

Liebe Grüße aus Berlin,

Murphy2ooo

Hallo Murphy,

die Verwendung von SendKeys ist recht gefährlich, da Du genau
wissen musst, was beim Öffnen der neuen Nachricht gerade aktiv
ist, wie viele TAB-Stops Du „drücken“ musst und vor allem muss
das Fenster aktiv und im Vordergrund sein! Wenn Du schon den
Verweis zur Objektlibrary setzt, kannst Du auch die Objekte
direkt ansprechen, wie von Julia sehr schön dargestellt

(http://www.wer-weiss-was.de/cgi-bin/forum/showarticl…).

Das hat den Vorteil, dass Du das ganze auch im Hintergrund
ablaufen lassen kannst und nebenbei noch ganz normal
arbeiten/spielen/surfen kannst :smile:

Ach ja: Und Sprungmarken sollten auch der Vergangenheit
angehören :wink:

Hallo du,

ich hatte vor einigen Tagen genau das selbe Problem:
Ich wollte das geöffnete Dokument mit OL an eine feststehende
Email-Adresse senden.

Irgendwie hat das mit dem Sendmail u.s.w. alles nicht
geklappt: die Benutzer mussten zahllose Sicherheits-Abfragen
bestätigen und zum Schluss stand die Empfänger-Adresse
mehrmals im An-Feld und der Datei-Anhang … naja, reden wir
nicht mehr davon, denn ich habs hin bekommen!

Hier der Code im Bereich meiner Userform (Word 2000). Ist zwar
nicht die feine Englische, aber es läuft!

######################################
Private Sub Email_senden()
'Alles fein deklarieren, gelle
Dim file As String, Ret
Dim filepath, filename As Object
Dim AppID

'Hier lass ich das Form schon verschwinden, alles andere geht
ohne
'Benutzer-Eingaben
Unload usrMailSenden
filepath = ActiveDocument.AttachedTemplate.Path
Set filename = ActiveDocument

'Folgende Zeile nicht vergessen, da OL die Datei sonst nicht
findet
'OL will halt den ganzen Pfad wissen…
file = filepath & „“ & filename

'Sollte schon eine „Neue Nachricht“ geöffnet sein, gehe zu…
If FindWindow(vbNullString, „Unbenannte Nachricht“) Then GoTo
SKGo
AppID = Shell(„C:\Programme\Microsoft Office\OFFICE11 _
\OUTLOOK.EXE /c ipm.note“, 1) ’ & filepath & „“ &
filename
DoEvents
'OL braucht eine Zeit zum Starten. Daher:
While Not FindWindow(vbNullString, „Unbenannte Nachricht“)
0
DoEvents
Wend
DoEvents

SKGo:

'Empf.-Adresse eintragen
SendKeys usrWBAssistentMail.txtAn.Value
DoEvents

'zum Betreff-Feld wechseln
SendKeys „{TAB}{TAB}{TAB}{TAB}“
DoEvents

'Dateiname als Betreff eintragen
SendKeys filename
DoEvents
SendKeys „{TAB}“
DoEvents
SendKeys usrWBAssistentMail.txtNachr.Value
DoEvents

'Anlage einfügen
Selection.InsertFile filename:="" & file & „“,
Attachment:=True
DoEvents

'Email senden
SendKeys „%s“ 'ALT+S ('Senden)
DoEvents

MsgBox „Ihre Nachricht wurde gesendet.“ & vbCrLf & vbCrLf
& _
„Bitte überprüfen Sie den Ordner ‚Gesendet‘ in MS Outlook!“, _
vbOKOnly, „Email senden“

'Userform entladen
Unload Me

######################################################################

Also, bei mir funktionierts. Im Editor unter Extras-Verweise
die MS Outlook x.0 Object Library aktivieren nicht vergessen!

Hoffe geholfen zu haben,

viel Erfolg,

liebe Grüße,

Murphy

Hi!

Aus welchem Buch hast Du das?

Learning by doing :smile:
Und das Beispiel hatte ich in einer Datei auf einem anderen Rechner, deswegen Heraussuchen.

Ebenso schönes WE!