13.6k Aufrufe
Gefragt in E-Mail Outlook von
Hallo,
wie ist es möglich, automatisch eine E-Mail zu verschicken, wenn eine Excel-Datei geändert und gespeichert wurde?

11 Antworten

0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo faro,

im Prinzip ist das möglich, Was man nun nur wissen müsste, ob dass alles im Hintergrund passieren soll, so dass der Benutzer davon nichts mitbekommt.

Wenn das im Hintergrund ablaufen soll, ist das mit Excel eigenen Mitteln etwas schwierig. Man kann zwar ein VBA-Makro schreiben, dass den Befehl erhält eine Mail sofort zu senden, allerdings ist das größere Problem Outlook. Wenn man von Excel oder einem anderen Programm auf Outlook zugreift, erscheint eine Hinweismeldung von Outlook, dass ein fremdes Programm auf Outlook zugreifen will. Außerdem enthält diese Meldung eine Frage, ob man das zulassen möchte oder nicht. Somit ist dann schon mal das Problem, dass hier der Benutzer auch auf "Nein" drücken kann und die Mail nicht versandt wird.
Ein weiteres Problem ist, ist Outlook nicht das Standard-Mailprogramm, will Outlook erst, dass es konfiguriert wird. Also der Mailversand wird wieder sichtbar.

Nun könnte man das auch über Mapi (eine spezielle Bibliothek)machen. Das hat aber wider das Problem, dass auch hier Probleme auftreten können. Das größte Problem ist Microsoft selber. Wenn die ein Kumulatives Sicherheitsupdate starten, dass diese Bibliothek als unsicher einstuft, weil darin eventuell ein Schlupfloch für Hacker vorhanden ist, funktioniert der Mailversand nicht mehr unter der alten Bibliothek, sondern es muss eine neue Bibliothek eingespielt und aktiviert werden.
Ich habe diese Prozedur bereits einmal hinter mir. Ich habe für einen Kunden ein Programm geschrieben, dass 100x Deutschlandweit eingesetzt wird und über das auch offiziell über das Mailstandardprogramm (muss nicht unbedingt Outlook sein) eine Mail versandt werden kann. Nun hat Microsoft diese besagte Bibliothek als unsicher deklariert, ein Killbit für diese Bibliothek gesetzt und eine neue Bibliothek zur Verfügung gestellt. Wenn man nun meint, ok, neue Bibliothek einspielen und aktivieren, der irrt. Das geht nur bei einem teil, bei anderen mussten andere Dinge berücksichtigt werden. Aber gut, dass ist eine andere Geschichte.

Wie Du siehst, ganz so einfach ist es nicht, falls das Vorhaben unsichtbar von statten gehen soll.

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von kicia Mitglied (939 Punkte)
Man braucht ein Programm, das:
a. mitbekommt, daß die Datei gespeichert wird
b. eine Email schickt

a) könnte sein:
- VBA
- ein Programm, das im Hintergrund läuft und von den Dateien weiss
- Server

b) könnte sein:
- Emailprogramm (Outlook,...) gesteuert von Programm a) (zB. VBA)
- das Programm, das im Hintergrund läuft, selbst
- Server

Ich würde sagen: Idealerweise müsste die Verwaltung der Dateien über einen Server laufen.
Die Exceldatei würde vom User "ausgecheckt", bearbeitet, und nach bearbeitung wieder "eingecheckt".
So könnte der Server beim Einchecken eine Email schicken.

Ich gebe allerdings zu, daß sich solcher Aufwand erstmal lohnen muss.
0 Punkte
Beantwortet von deluxestyle Mitglied (901 Punkte)
Microsoft bietet für sowas eine gute aber auch teure Lösung an.

Den Sharepoint Server.
Auf dem können die Dateien verwaltet werden. Allerdings ist es nicht ganz ohne so einen in ein bestehendes System zu integrieren. außerdem ist es nicht billig
0 Punkte
Beantwortet von faro Einsteiger_in (25 Punkte)
Hallo,

Es kann ruhig (sollte sogar) sichtbar sein.

Der Hintergrund ist, das andere mitbekommen sollen, wenn an der Datei was geändert wurde und es eigentlich von dem "Änderer" die Aufgabe ist, die anderen Beteiligten darüber zu informieren und damit das nicht vergessen wird, sollte das automatisch erfolgen.

Über eine VSS-Lösung habe ich schon nachgedacht, das Problem ist nur, das lokale Kopien gespeichert werden, wenn es ausgecheckt ist und dann manchmal der Überblick verloren wird, welche Datei jetzt aktueller ist.
Ähnliches setzen wir bereits ein, nicht immer ohne Probleme...

Wie würde das Skript aussehen?
0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo Varo,

nur mal zum Verständnis: Was verstehst Du unter einer VSS-Lösung?

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von kicia Mitglied (939 Punkte)
Mit einer Serverlösung wird es vermutlich immer eine lokale Kopie geben. Die Frage ist nur, wieviel man davon mitbekommt.

Geht es um visual source safe ?
hab ich nie benutzt. Ich kenn aber so ein Problem, da wir Dreamwever benutzen. Die einzige Lösung, die mir einfiel, war allen Mitarbeitern einzuschärfen, niemals - nie nie nie - die lokale Version für irgendwas zu verwenden (nur in Dreamweaver wird natürlich daran gearbeitet, aber davon merkt man dann ja nichts). Somit ist die lokale Kopie eine reine Arbeitskopie, sozusagen. Man hat niemals einen Grund, überhaupt in das Verzeichnis hineinzuschauen.

Das funktioniert sehr gut für uns, ich gebe aber zu, daß das in anderer Umgebung weit komplizierter sein könnte.
0 Punkte
Beantwortet von faro Einsteiger_in (25 Punkte)
Morgen,
ja mit VSS meine ich Visual Source Safe.
Aber diese Variante scheidet aus.
0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo faro,

mal so als erster Ansatz nachfolgend mal ein Makro, dass Dir eine Mail in Outlook erstellt und anzeigt, wenn die Datei gespeichert wird. In der Mail wird ein fester Text und ein Link zu der geänderten Datei angezeigt.

Kopiere das Makro in das VBA-Projekt "DieseArbeitsmappe".
Teste das Makro aber bitte in einer Testdatei und nicht gleich in Deiner Originaldatei.

Option Explicit

'Verweis auf Microsoft Outlook x.0 Object Library (Pfad: C:\Programme\Microsoft Office\Office xx\, _
Bibliothek MSOUTL.OLB) setzen

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim objOutlook As Object
Dim objNachricht As Object
Dim lngRow As Long

lngRow = Selection.Row

Set objOutlook = CreateObject("Outlook.Application")
Set objNachricht = objOutlook.CreateItem(0)

With objNachricht
'Text für Betreffzeile wird eingefügt
.Subject = "Änderung an Datei """ & ThisWorkbook.Name & """!"
'Text in Nachrichtentext
.HTMLBody = "Achtung, es hat eine Änderung in der Datei " _
& "<a href=""file:///" & ThisWorkbook.FullName & """>Änderung in Datei " _
& ThisWorkbook.Name & "</a> stattgefunden!"
'Text in Empfängerzeile
.To = "Test@web.de"
'Hier wird die Mail angezeigt
.Display
'Hier wird die Mail gleich in den Postausgang gelegt
'.Send
End With

Set objOutlook = Nothing
Set objNachricht = Nothing

End Sub
Beachte bitte den Hinweis auf den zu aktivierenden Verweis in dem VBA-Code ganz oben.
Ich hoffe, Du kommst klar.

Solltest Du nicht wissen, wie Du den Code in Deine Datei bekommst, dann schau mal auf meiner HP in der Rubrik Anleitungen und dort dann in der Anleitungsnummer 1 nach. Dort stelle ich dazu eine bebilderte Anleitung zur Verfügung, die Dir sicherlich helfen wird.

Bei Fragen melde Dich.

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hi,

ich nochmal. Die Zeilen

Dim lngRow As Long

lngRow = Selection.Row


können in dem VBA-Code gelöscht werden. Ich hatte diesen Code aus einer Antwort von mir gestern nur kopiert und auf Deine Bedürfnisse angepasst. Diese beiden besagten Zeilen werden bei Dir nicht benötigt.

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von faro Einsteiger_in (25 Punkte)
Danke, ich werde es mal ausprobieren.
...