Excel: Makro Infomail bei Änderung

Hallo,

ich habe eine Datei erstellt, die von einem Benutzer A gepflegt wird. Zwei weitere Anwender B und C können die Datei nur einsehen.

Da B und C aber nicht wissen, wann A Änderungen vorgenommen hat, müssen sie regelmäßig nachschauen.

Ideal wäre es, wenn ein Makro automatisch eine Mail an B und C versenden würde, wenn A eine Änderung vorgenommen hat bzw. neu gespeichert hat.

Hierzu habe ich die SendMail-Methode gefunden. Hierbei habe ich allerdings noch zwei Probleme:

  • Ich hab nur die Möglichkeit ActiveWorkbook.SendMail gefunden, d.h. hier wird die Datei als Anhang mitgesandt. Da die Datei recht groß ist, wäre es gut, wenn es eine Möglichkeit gebe, nur eine leere Mail zu senden.

  • Außerdem kommt immer noch eine Warnmeldung, dass eine automatisierte Mail versandt werden soll und es sich dabei um einen Virus handeln könne. Man muss den Versand dann noch einmal manuell bestätigen. Gibt es hier keine Möglichkeit, dies zu unterdrücken?

Falls es einfacher geht, wäre auch eine Möglichkeit einer Popup-Info bei B und C gut, also keine richtige Mail über das System.

Fällt einem von euch eine Lösung zu meinem Problem ein?

Vielen Dank und Gruß
Martin

Alternative?
Hi…

reicht es vielleicht auch, wenn Du einfach nur als before_save makro das Datum einträgst, wann was geändert wurde?
Wenn jedesmal, wenn eine kleinigkeit verändert wird eine mail geschickt wird, wäre das denke ich doch auch sehr aufdringlich und nervig.
Wenn es um mehrere Dateien geht könnte man auch eine persönliche Exceldatei für B und C machen in der steht, zu welcher Zeit die Datei zuletzt angeschaut wurde (abruf per Makro) und welches Datum die letzte Änderung war… (Verweis auf das Datum, das before_save in eine definierte Zelle der jeweiligen Datei geschrieben wird/wurde).

mit den Mailfunktionen kenne ich mich leider nicht aus…

Hi,

danke für den Alternativvoorschlag. An solch eine Lösung hatte ich auch erst gedacht, aber im Grunde könnte man dann ja auch einfach im Explorer das Änderungsdatum ansehen.

Das Problem ist halt das A mal mehrer Änderungen an einem Tag hat und dann wieder eine ganze Woche gar nicht ändert, dass wäre dann schon sehr mühselig, jedes Mal nachzuschauen.

Gruß
Martin

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

Ideal wäre es, wenn ein Makro automatisch eine Mail an B und C
versenden würde, wenn A eine Änderung vorgenommen hat bzw. neu
gespeichert hat.

  • Ich hab nur die Möglichkeit ActiveWorkbook.SendMail
    gefunden, d.h. hier wird die Datei als Anhang mitgesandt. Da
    die Datei recht groß ist, wäre es gut, wenn es eine
    Möglichkeit gebe, nur eine leere Mail zu senden.

  • Außerdem kommt immer noch eine Warnmeldung, dass eine
    automatisierte Mail versandt werden soll und es sich dabei um
    einen Virus handeln könne. Man muss den Versand dann noch
    einmal manuell bestätigen. Gibt es hier keine Möglichkeit,
    dies zu unterdrücken?

Hi Martin,
probier mal nachfolgenden Code.
Zu den Warnmeldungen, gehen die auch mit Enter oder Tastenkombinationen weg?
Dann mal application.sendkeys probieren. Dies auch beim Versenden wenn mna wie bei meinem OE noch ein Alt+S zum Abschicken drücken muss. ggfs noch eine Warteschleife vor Sendkeys einbauen.
Und poste mal hier deinen Code.
Gruß
Reinhard

Private Declare Function ShellExecute Lib "Shell32.dll" \_
Alias "ShellExecuteA" (ByVal hWnd As Long, \_
ByVal lpOperation As String, ByVal lpFile As String, \_
ByVal lpParameters As String, ByVal lpDirectory As String, \_
ByVal nShowCmd As Long) As Long

Private Sub Workbook\_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If Environ("Username") "Müller" Then Exit Sub
Sub Mail(eMail As String, Optional Subject As String, Optional Body As String)
 Call ShellExecute(0&, "Open", "mailto:" + eMail + \_
 "?Subject=" + Subject + "&Body=" + Body, "", "", 1)
End Sub
Sub Mail\_verschicken()
 Call Mail("[email protected]", "Ein Betreff", "Vorgabetext")
End Sub
End Sub

Hi Reinhard,

vielleicht hätte ich dazu sagen sollen, dass ich ziemliche VBA-Laie bin. Danke für deine Hilfe aber wenn ich versuche deinen Code einzufügen bekomme ich eine Fehlermeldung „Fehler beim Kompilieren“.

Der Code, den ich einer Schaltfläche zugeteilt habe sieht bisher recht dürftig aus:

Sub Mail\_Info()

ActiveWorkbook.SendMail Recipients:="[email protected]"

End Sub 

Die Warnmeldung geht zwar mit Enter weg, allerdings ist die Schaltfläche „Ja“ erst nach Verzögerung freigegeben und man muss vom voreingestellten „Nein“ auf „Ja“ wechseln.

Ich hoffe du kannst mit meinen Infos etwas anfangen?

Gruß
Martin

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

Hi Martin,

vielleicht hätte ich dazu sagen sollen, dass ich ziemliche
VBA-Laie bin. Danke für deine Hilfe aber wenn ich versuche
deinen Code einzufügen bekomme ich eine Fehlermeldung „Fehler
beim Kompilieren“.

Der Code muss in den Codebereich des Arbeitsmappe, also Alt+F11, Doppelklick auf „DieseArbeitsmappe“. Er wird dann automatisch aktiv wenn die datei geschlossen wird.
Die ersten 5 Zeilen sind eine Zeile. Die 4 Unterstriche sind Zeilenumbrüche.
Entweder alle raus so dass sich eine ergibt oder dafür sorgen dass hinter jedem Unterstrich noch ein Leerzeichen kommt, dann Enter.

Die If-Zeile überprüft den Usernamen, wenn sie beim Testen stört, setz ein Hochkamma (rechts neben ä) vor das If, sie wird dann nicht abgearbeitet.
Der Code lief bei mir auf Excel2000 und OE problemlos.

Die Warnmeldung geht zwar mit Enter weg, allerdings ist die
Schaltfläche „Ja“ erst nach Verzögerung freigegeben und man
muss vom voreingestellten „Nein“ auf „Ja“ wechseln.

Mit Tab oder Shift+Tab kann man das wechseln, dies also per sendkeys probieren. sendkeys wird in der VBA-Hilfe erklärt.

Wegen der Wartepause/verzögerung, füge am Code als allererste Zeile noch Folgendes ein:

Declare Sub Sleep Lib „kernel32“ Alias „Sleep“ (ByVal dwMilliseconds As Long)

Dan kannst du an beliebigen Programmstellen, also z.B nach dem Starten des Emailprogramms und vor dem Senden der tastenanschläge, einfach durch folgende Zeile:
Sleep 1000
für bestimmte Zeit pausieren. Die Zahlen entsprechen Millisekunden.

Gruß
Reinhard

Private Declare Function ShellExecute Lib „Shell32.dll“ _
Alias „ShellExecuteA“ (ByVal hWnd As Long, _
ByVal lpOperation As String, ByVal lpFile As String, _
ByVal lpParameters As String, ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As Long

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean,
Cancel As Boolean)
If Environ(„Username“) „Müller“ Then Exit Sub
Sub Mail(eMail As String, Optional Subject As String, Optional
Body As String)
Call ShellExecute(0&, „Open“, „mailto:“ + eMail + _
„?Subject=“ + Subject + „&Body=“ + Body, „“, „“, 1)
End Sub
Sub Mail_verschicken()
Call Mail(„[email protected]“, „Ein Betreff“, „Vorgabetext“)
End Sub
End Sub

danke für den Alternativvoorschlag. An solch eine Lösung hatte
ich auch erst gedacht, aber im Grunde könnte man dann ja auch
einfach im Explorer das Änderungsdatum ansehen.

könnte man, aber dazu müsste man hinnavigieren. :smile:

Das Problem ist halt das A mal mehrer Änderungen an einem Tag
hat und dann wieder eine ganze Woche gar nicht ändert, dass
wäre dann schon sehr mühselig, jedes Mal nachzuschauen.

benutzen B und C denn sonst nie Excel?
Schliesslich könnte man es in einer automatisch mitgestarteten Datei überprüfen. In meiner personl.xls stehen zum Beispiel Formeln zur umrechnung von Euro und anderen Währungen, Inch auf cm etcpp.
Genauso könnte man dann bei Dir verfahren und man würde - wenn man denn will in grosser, fetter, roter Schrift sehen, dass eine neue Version verfügbar ist…