Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
988to992
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
988to992
988to992
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Email automatisch aus Excel versenden

Email automatisch aus Excel versenden
greenhorn
Hallo,
ich habe folgendes:
  • Eine Excel-Tabelle wird kontunuierlich mit Daten beschrieben.
  • Bei der Überschreitung eines Wertes soll automatisch eine email versendet werden
  • .
    Auf dieser Seite http://www.office.gmxhome.de/_excel_outlook.htm habe ich schon mal etwas passendes gefunden.
    Leider erschließt sich mir nicht alles.
    Dies gehört in das Klassenmodul der Tabelle, in der Sie einen Wert überwachen wollen Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) If Range("A1") > x Then Send_Excel_Message End Sub


    Den Satz "Dies gehört in das Klassenmodul der Tabelle, in der Sie einen Wert überwachen wollen" verstehe ich leider nicht ganz. Kann mir da jemand weiterhelfen?
    Das hier kommt in ein Modul der betreffenden Arbeitsmappe. Ist hier alles korrekt? (Ich kanns leider noch nicht ausprobieren)

    Sub sende_stoermeldung() Dim MyMessage As Object, MyOutApp As Object 'InitializeOutlook = True Set MyOutApp = CreateObject("Outlook.Application") 'Nachrichtenobject erstellen Set MyMessage = MyOutApp.CreateItem(0) With MyMessage .To = "me@provider.de; " .Subject = "Stoermeldung " & Date & Time 'Hier wird eine normale Text Mail erstellt .body = "Es ist eine Störung aufgetreten" & vbCrLf & "Die Störung Nr. 1 (irgendwas) ist _ aufgetreten." 'Hier wird die Mail nochmals angezeigt .Display 'Nicht ganz offiziell :-) .Save SendKeys "%S" End With MyOutApp.Quit Set MyOutApp = Nothing Set MyMessage = Nothing End Sub


    christian

    49
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Benutzer
    Anzeige
    AW: Email automatisch aus Excel versenden
    Hoffi
    Hallo,
    der Worksheet_Change Code kommt in die Tabelle, in der der Wert überwacht werden soll!
    Also, ist der Wert der überwacht werden soll in Tabelle1, dann rechte Maustaste auf den Reiter Tabelle1, Code anzeigen, da rein kopieren.
    Der Code im normalen Modul sollte aber dann auch so heißen, wie im Tabellen Code angegeben.
    
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Range("A1") > x Then Send_Excel_Message
    End Sub
    


    Sub sende_stoermeldung()
    Dim MyMessage As Object, MyOutApp As Object
    'InitializeOutlook = True
    Set MyOutApp = CreateObject("Outlook.Application")
    'Nachrichtenobject erstellen
    Set MyMessage = MyOutApp.CreateItem(0)
    With MyMessage
    .To = "me@provider.de; "
    .Subject = "Stoermeldung " & Date & Time
    'Hier wird eine normale Text Mail erstellt
    .body = "Es ist eine Störung aufgetreten" & vbCrLf & "Die Störung Nr. 1 (irgendwas) ist _
    aufgetreten."
    'Hier wird die Mail nochmals angezeigt
    .Display
    'Nicht ganz offiziell :-)
    .Save
    SendKeys "%S"
    End With
    MyOutApp.Quit
    Set MyOutApp = Nothing
    Set MyMessage = Nothing
    End Sub


    Grüße
    Hoffi

    Anzeige
    danke für den Hinweis
    greenhorn
    stimmt, sonst hätte ich weder gegrübelt woran es liegt das es nicht funktioniert.

    AW: Email automatisch aus Excel versenden
    greenhorn
    Ok, das habe ich verstanden.
    Ich habe etwa 15 Störmeldungen. Ich würde jetzt so vorgehen:
    Für jeden Code der eine Email der betreffenden Störmeldung erzegut ein separates Modul anlegen (oder geht dies auch in einem?)
    und den jeweiligen Zugriff auf die einzelnen in das Klassenmodul in dieser Art schreiben:
    Userbild
    ist das korrekt?
    christian

    AW: Email automatisch aus Excel versenden
    Matthias
    Hallo Christian,
    nein, es kann nur eine Prozedur dieses Namens geben.
    Also die Befehle alle in die EINE Prozedur Worksheet_Change().
    Gruß Matthias

    Anzeige
    AW: Email automatisch aus Excel versenden
    Matthias
    Hallo nochmal,
    also meine obige Erklärung war auch zu einfach, sonst schickt er zu viele Mail...
    also so:
    
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("AK5")) Is Nothing Then
    'Wenn AK5 verändert wurde:
    If Range("AK5") > 0 Then sende_stoermeldung_drehzahl_hoch
    End If
    If Not Intersect(Target, Range("AL5")) Is Nothing Then
    'Wenn AL5 verändert wurde:
    If Range("AL5") > 0 Then sende_stoermeldung_drehzahl_niedrig
    End If
    End Sub
    


    Voraussetzung ist natürlich, dass die betreffenden Zellen keine Formel enthalten, sondern manuell oder per Makro geändert wurden.
    Gruß Matthias

    Anzeige
    AW: Email automatisch aus Excel versenden
    greenhorn
    das die werte nicht aus einer formel erzeugt werden sondern direkt eingetragen werden kann ich gewährleisten.
    Wie mache ich das jetzt nochal mit dem Modul? Ich habe ja das was ich ins Modul schreibe, muss ich für jede Störmelde-Mail jeweils ein separates Modul Anlegen?
    Und Ist es jetzt so das er mit
    
    "Range"
    

    die gesamte Spalte überprüft?
    christian

    AW: Email automatisch aus Excel versenden
    Matthias
    Hallo Christian,
    Wie mache ich das jetzt nochal mit dem Modul? Ich habe ja das was ich ins Modul schreibe, muss ich für jede Störmelde-Mail jeweils ein separates Modul Anlegen?
    Nein, da reicht ein Modul für die ganzen Prozeduren.
    
    Sub sende_stoermeldung_drehzahl_hoch()
    End Sub
    Sub sende_stoermeldung_drehzahl_niedrig()
    End Sub
    


    Alles in ein allg. Modul (also z.B. "Modul1").
    Und "Range" heißt erstmal nur Bereich. Das kann eine Zelle sein (Range("AL5")), oder ein Bereich (Range("A1:D20")), auch eine Spalte (Range("A:A")).
    In der Worksheet_Change-Prozedur wird geprüft, ob sich in der best. Zelle was geändert hat, wenn ja, dann wird geprüft, ob der Wert größer null ist, wenn das auch, dann wird das Makro aufgerufen, welches die Mail versendet.
    Gruß Matthias

    Anzeige
    AW: Email automatisch aus Excel versenden
    greenhorn
    Danke, wenn ich die gesamte Spalte prüfen möchte passe ich jetzt an:
    
    Range("A:A")
    


    korrekt?
    Im Klassenmodul muss aber nicht extra definiert sein in welchem Modul die Störmelde-Mail-Codes Stehen, dass macht er anhand der bezeichnung, richtig?

    AW: Email automatisch aus Excel versenden
    Matthias
    Hallo,
    Prüfen auf Änderung, ja:
    If Not Intersect(Target, Range("A:A")) Is Nothing Then...
    Aber die Zellinhalte musst du einzeln prüfen.
    Gruß Matthias

    ich muss es noch weiter erklären ...
    greenhorn
    das ganze sieht z.b. so aus:
    in der spalte wird ein messwert aufgezeichnet:
    2
    2
    2
    2
    5 (Grenzwert überschritten - sende E-mail)
    5
    5
    5
    5
    hier keine weitere Mail innerhalb von 2 Minuten nach erster Grenzwertüberschreitung
    im prinzip wenn das erste mal (nur das erste mal) der grenzwert in der spalte überschritten die E-Mail senden. falls dann der betrieb 2minuten störungsfrei war und erneut der grenzwert überschritten wurde, wieder die Störmelde-Email senden.
    Trifft das dass was du mit
    
    "Aber die Zellinhalte musst du einzeln prüfen." 
    

    meinst

    Anzeige
    AW: ich muss es noch weiter erklären ...
    Matthias
    Hallo,
    das wird mir jetzt doch etwas unübersichtlich.
    Wie wird denn die Tabelle beschrieben?
    Und es gibt also 15 Spalten, die beschrieben werden, und vorne steht die Zeit?
    Der neue Wert kommt immer ans Ende der Tabelle?
    Und diese 2 Minuten Auszeit, gelten die für jede Spalte separat?
    Gruß Matthias

    AW: ich muss es noch weiter erklären ...
    greenhorn
    tschuldige, ich versuchs zu lockern:
    
    Wie wird denn die Tabelle beschrieben?
    


    die messwerte der anlage werden von schnittstellen über VBA in die Tabelle eingetragen

    
    Und es gibt also 15 Spalten, die beschrieben werden, und vorne steht die Zeit?
    


    Es gibt noch eine genze menge mehr spalten, die Uhrzeit steht in Spalte B, die 15 Spalten sind jeweils einzelne Störmeldungen

    
    Der neue Wert kommt immer ans Ende der Tabelle?
    


    korrekt

    
    Und diese 2 Minuten Auszeit, gelten die für jede Spalte separat?
    


    das hab ich falsch gesagt, nicht aus zeit. die anlage läuft durchaus weiter nur soll der der emails empfängt nicht alle zehn sekunden die gleiche mail erhalten sondern nur dann wenn die störung eintritt.
    Falls dann die Störung wieder "weg" ist und nach zwei minuten störungsfreiheit (zeitdiffernz zum letzten überschrittenen grenzwert) erneut überschritten wird, dann soll er wieder eine email senden und dann wie von vorn verfahren.
    Erkläre gerne noch weitere Unklarheiten

    Anzeige
    AW: ich muss es noch weiter erklären ...
    Matthias
    Hallo,
    also alle 10 Sekunden wird die Tabelle erweitert? Und was passiert, wenn die Zeilen zu Ende sind?
    Gruß Matthias

    AW: ich muss es noch weiter erklären ...
    greenhorn
    die aufzeichnung geschieht tageweise alle zehn, also maximal 8640 Zeilen + 5 Zeilen Überschriften.
    Es wird für jeden Tag eine einzelne Tabelle erzeugt und beschrieben.

    AW: ich muss es noch weiter erklären ...
    Matthias
    Hallo Christian,
    Aber wenn das Beschreiben der Tabelle bereits mit VBA erfolgt, wieso hakt man bei diesem Code nicht ein und ruft von dort direkt den Code zu Versenden der Email auf? Wieso der Umweg über Woksheet_Change()?
    Gruß Matthias

    AW: ich muss es noch weiter erklären ...
    greenhorn
    an das grundprogramm komm ich nicht direkt ran, nur die datenregistrierung ist mein "spielplatz"

    Anzeige
    AW: ich muss es noch weiter erklären ...
    Matthias
    Hi,
    wenn aber jeden Tag eine neue Tabelle (Arbeitsmappe?) erzeugt wird, wie wird dann gewährleistet, dass in diesen Mappen dein Makro mit drin ist?
    Verstehe, dass ich solche Fragen stelle, dann das ist ja alles Grundvoraussetzung, damit es überhaupt funktionieren kann...
    Gruß Matthias

    AW: ich muss es noch weiter erklären ...
    greenhorn
    Die tabelle wird anhand einer mustertabelle (Arbeitsmappe) beschrieben,
    d.h. er kopiert das leere muster mit allem was dazu gehört. Makros, Formatierungen und vorgfertigte Diagramme.
    Diese ganze E-Mail geschichte würde ich dann in diese Mustertabelle einbinden wollen.
    Kein Problem mit der Fragerei, ich möchte ja zu einem Ergebnis kommen.
    christian

    Anzeige
    AW: Email automatisch aus Excel versenden
    Matthias
    Hallo Christian,
    ich fang nochmal links im Thread an ;-)
    Ich habe mal eine Beispieltabelle aufgebaut nach diesem Muster:
    Tabelle1
     ABCDEFGHI
    1         
    2         
    3         
    4         
    5 ZeitWert1Wert2Wert3Wert4Wert5Wert6Wert7
    6 18:10:000000000
    7 18:10:100000000
    8 18:10:201111100
    9 18:10:301234552
    10 18:10:402222222
    Formeln der Tabelle
    B7 : =B6+ZEIT(0;0;10)
    B8 : =B7+ZEIT(0;0;10)
    B9 : =B8+ZEIT(0;0;10)
    B10 : =B9+ZEIT(0;0;10)
     
    Diagramm - Grafik - Excel Tabellen einfach im Web darstellen    Excel Jeanie HTML  3.0    Download  
    Das geht nach rechts weiter bis Spalte Q (Wert15).
    Die Formeln in Spalte B sind nur zum Testen und werden nicht benötigt.
    In das Tabellenmodul nun diesen Code:
    
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng As Range, z As Range
    Dim i As Integer
    Dim Sp(1 To 15) As Integer
    Dim GW(1 To 15) As Double
    Dim z1 As Long
    'Spalten Setzen: Sp(1)=3, Sp(2)=4 usw.
    For i = 1 To 15
    Sp(i) = i + 2 'Wert1 in Spalte 3 usw.
    Next i
    'Grenzwerte individuell setzen (könnten auch in der Tabelle irgendwo stehen):
    GW(1) = 1
    GW(2) = 2
    GW(3) = 3
    GW(4) = 4
    GW(5) = 5
    GW(6) = 6
    GW(7) = 7
    GW(8) = 8
    GW(9) = 9
    GW(10) = 10
    GW(11) = 11
    GW(12) = 12
    GW(13) = 13
    GW(14) = 14
    GW(15) = 15
    For i = 1 To 15 ' alle 15 Spalten prüfen:
    Set rng = Intersect(Target, Columns(Sp(i)))
    If Not rng Is Nothing Then
    For Each z In rng
    If z.Value > GW(i) Then
    'letzten 2 Minuten prüfen:
    z1 = Application.Max(z.Row - 12, 5) '12 Zeilen hoch, höchstens bis Zeile 5 (4  _
    Zeilen Überschriften)
    If WorksheetFunction.Max(Range(Cells(z1, z.Column), z.Offset(-1, 0))) 


    Teste das mal, soweit müsste es funktionieren.
    Und dein Makro zum Mailversand würde ich universeller gestalten, d.h. mit der Fehlermeldung als Argument. Dann brauchst du keine 15 Makros sondern nur eines.
    Also melde Dich, ob es funktioniert.
    Gruß Matthias
    P.S.:
    Zum Mailversand gibt es übrigens das nette DOS-Tool BLAT.EXE, damit kann man ohne Outlook automatisch von Excel heraus Mails versenden, auch Dateianhänge sind kein Problem:
    http://www.blat.net/

    Anzeige
    AW: Email automatisch aus Excel versenden
    greenhorn
    morgen,
    schonmal danke für deine ausführungen.
    Nur damit ich mich nicht am Anfang gleich verrenne:
    Ich habe mal eine screenshot des tabellenkopfes gemacht, ich hoffe man kann es erkennen.
    Userbild
    Die Störmeldungen stehen bei mir in den Spalten AK bis AY
    Jeder Störung wird der Grenzwert "Störung" entsprechend der Nummer im Kopf definiert. Also wenn in der Spalte AM eine 3 steht soll dies als Störung gelten.
    Was müsste ich schonmal von vornherein anpassen? (wie gesagt mein VBA-Kenntnisse sind so gut wie nicht vorhanden)
    christian

    AW: Email automatisch aus Excel versenden
    Matthias
    Hallo christian,
    teste mal dies:
    
    Private Sub Worksheet_Change(ByVal Target As Range)
    Const Zeile1 = 5 'erste Zeile mit Werten
    Const ZeileMeldung = 4 ' Zeile mit der Warnmeldung (z.B. "Drehzahl hoch")
    Dim rng As Range, z As Range
    Dim i As Integer
    Dim Sp(1 To 15) As Integer
    Dim GW(1 To 15) As Double
    Dim z1 As Long
    'Spalten Setzen
    For i = 1 To 15
    Sp(i) = i + 36 'Wert1 in Spalte 37 (AK) usw.
    Next i
    'Grenzwerte setzen:
    GW(1) = 1: GW(2) = 2: GW(3) = 3: GW(4) = 4: GW(5) = 5: GW(6) = 6
    GW(7) = 7: GW(8) = 8: GW(9) = 9: GW(10) = 10: GW(11) = 11: GW(12) = 12
    GW(13) = 13: GW(14) = 14: GW(15) = 15
    For i = 1 To 15 ' alle 15 Spalten prüfen:
    Set rng = Intersect(Target, Range(Cells(Zeile1, Sp(i)), Cells(Rows.Count, Sp(i))))
    If Not rng Is Nothing Then
    For Each z In rng
    If z.Value > GW(i) Then
    'letzten 2 Minuten prüfen (alle 10 Sekunden ein Wert also 12 Werte):
    z1 = Application.Max(z.Row - 12, Zeile1) '12 Zeilen hoch, höchstens bis [Zeile1] _
    wg. Überschriften
    If WorksheetFunction.Max(Range(Cells(z1, z.Column), z.Offset(-1, 0))) 


    Gruß Matthias

    AW: Email automatisch aus Excel versenden
    greenhorn
    ich habe das jetzt so in ein modul eingefügt und gespeichert.
    Dann hab ich einfach willkürlich werte (über den grenzwerten) in die spalten für störungen geschrieben, sollte sich dabei was tun?
    Hab ich dein "Testen" falsch verstanden?

    AW: Email automatisch aus Excel versenden
    Matthias
    Hi Christian,
    nicht in irgendein Modul!
    In das Codemodul des Tabellenblattes!
    Gruß Matthias

    AW: Email automatisch aus Excel versenden
    greenhorn
    im Tabellenblatt ein neues angelegt.
    sieht so aus. Korrekt?
    Userbild

    AW: Email automatisch aus Excel versenden
    greenhorn
    tschuldige.
    du meintest also ins klassenmodul. (Bitte nicht verzweifeln mit meiner Unkenntnis)
    So:
    Userbild
    Wie weiter?

    AW: Email automatisch aus Excel versenden
    Matthias
    Hi Christian,
    nein...
    In Projektexplorer Doppelklick auf Tabelle1 (Messwerte) dann hier reinkopieren.
    Das andere hau wieder raus.
    Gruß Matthias

    AW: Email automatisch aus Excel versenden
    greenhorn
    bin heute aber auch schwer von begriff, danke für die geduld und das verständnis.
    Ok, das habe ich jetzt so gemacht.
    
    In Projektexplorer Doppelklick auf Tabelle1 (Messwerte) dann hier reinkopieren.
    


    Im Klassenmodul stehen jetzt wieder die ganzen anweisungen zum senden der mail:

    
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("AK:AK")) Is Nothing Then
    'Wenn Wert ungleich "0" --> Störung:
    If Range("AK:AK") > 0 Then sende_stoermeldung_drehzahl_hoch
    End If
    If Not Intersect(Target, Range("AL:AL")) Is Nothing Then
    'Wenn Wert ungleich "0" --> Störung:
    If Range("AL:AL") > 0 Then sende_stoermeldung_drehzahl_niedrig
    End If
    usw.
    


    und im modul stoermelde das hier:

    
    Sub sende_stoermeldung_drehzahl_hoch()
    Dim MyMessage As Object, MyOutApp As Object
    'InitializeOutlook = True
    Set MyOutApp = CreateObject("Outlook.Application")
    'Nachrichtenobject erstellen
    Set MyMessage = MyOutApp.CreateItem(0)
    With MyMessage
    .To = "me@provieder.de"
    .Subject = "automatische Stoermeldung: Motordrehzahl hoch" & Date & Time
    'Hier wird eine normale Text Mail erstellt
    .body = "Es ist eine Störung eingetreten" & vbCrLf & "Motordrehzahl hoch"
    'Hier wird die Mail nochmals angezeigt
    .Display
    .Save
    SendKeys "%S"
    End With
    MyOutApp.Quit
    Set MyOutApp = Nothing
    Set MyMessage = Nothing
    End Sub
    usw. für jede einzelne störung
    


    wie kann ich jetzt testen?

    AW: Email automatisch aus Excel versenden
    Matthias
    Hallo Christian,
    also ins Modul der Tabelle1, die man auch Klassenmodul der Tabelle nennen kann, den Code, den ich vorhin gepostet habe.
    In ein allgemeines Modul dann ganz richtig die Makros zum Mailversand.
    Das Klassenmodul "Klasse1", das im Projektexplorer auch so heißt, kannst du löschen.
    Testen kannst du dann, indem du Werte in die Tabelle1 einträgst. Achte auf die von mir willkürlich festgelegten Grenzwerte.
    Vile Glück.
    Gruß Matthias

    AW: Email automatisch aus Excel versenden
    greenhorn
    ok, hab ich gemacht.
    getestet habe ich auch und es funktioniert. Sieht so aus:
    Userbild

    AW: Email automatisch aus Excel versenden
    Matthias
    Hi Christian,
    dann ändere mal noch diese Konstanten:
    
    Const Zeile1 = 4 'erste Zeile mit Werten
    Const ZeileMeldung = 3 ' Zeile mit der Warnmeldung (z.B. "Drehzahl hoch")
    
    
    
    Dann scheinbar hast du doch nur 4 Zeilen Überschrift und in Zeile 3 steht der Messwert.
    Und jetzt? Bist du zufrieden?
    Gruß Matthias
    

    AW: Email automatisch aus Excel versenden
    greenhorn
    habs so geäandert.
    Ich hab hier nochmal einen screenshot wo man sieht welche zeilen im muster beschrieben sind:
    Userbild
    Stimmt, ich habe 4 Überschrifts-Zeilen. Aber eine Eintragung soll erst ab Zeile 5 vorgenommen werden.
    ICH BIN VOLL ZUFRIEDEN, kann man das ganze jetzt mal mit einem e-mail versand testen (verknüpfen) ?
    Ist ja mein Ziel.

    AW: Email automatisch aus Excel versenden
    Matthias
    Hi,
    Deine ganzen Störmelde-Makros (15 oder so) durch diese eine ersetzen:
    
    Sub sende_stoermeldung(mld As String)
    Dim MyMessage As Object, MyOutApp As Object
    'InitializeOutlook = True
    Set MyOutApp = CreateObject("Outlook.Application")
    'Nachrichtenobject erstellen
    Set MyMessage = MyOutApp.CreateItem(0)
    With MyMessage
    .To = "me@provieder.de"
    .Subject = "automatische Stoermeldung: " & mld & " " & Date & Time
    'Hier wird eine normale Text Mail erstellt
    .body = "Es ist eine Störung eingetreten" & vbCrLf & mld
    'Hier wird die Mail nochmals angezeigt
    .Display
    .Save
    SendKeys "%S"
    End With
    MyOutApp.Quit
    Set MyOutApp = Nothing
    Set MyMessage = Nothing
    End Sub
    


    Und im Code des Tabellenblattes das entsprechend anpassen:

    
    If WorksheetFunction.Max(Range(Cells(z1, z.Column), z.Offset(-1, 0))) 


    Gruß Matthias

    AW: Email automatisch aus Excel versenden
    greenhorn
    ok, das habe ich gemacht.
    habe einen wert oberhalb grenzwert eingetragen, dann kommt die Msg-Box, dann ok geklickt.
    Kann man das hier weglassen das er erst gar nicht diese meldung gibt die man bestätigen muss, sondern gleich outllok ansteuert?
    Ich hab meine email-adresse eingesetzt. allerdings landet die mail nur im ordner "Entwürfe" und muss noch manuell abgesendet werden.
    Kann man das hier ebenfalls komplett automatisch machen? (Es ist ja keiner da der klicken könnte, soll ja der computer machen =) )
    BIS JETZT IST DAS SCHON MAL PRIMA, DANKE.
    christian

    AW: Email automatisch aus Excel versenden
    greenhorn
    sind da meine vortsellungen machbar?

    AW: Email automatisch aus Excel versenden
    Matthias
    Hi,
    du musst nur den MsgBox-Befehl auskommentieren also ein Hochkomma vor den Befehl setzen:
    'MsgBox ...
    Wie das mit Outlook geht weiß ich nicht ich verwende Thunderbird.
    Aber wie gesagt kannst du auch mal Blat.exe verwenden wenn euer Admin das zulässt.
    Das ist eine exe-Datei und eine dll, die aber nicht installiert werden müssen.
    Gruß Matthias

    es funktioniert ...
    greenhorn
    großes Danke so gehts!
    nach dem öffnen der datei habe alle störmeldungen durchprobiert und siehe da, alle stömelde-emails landen im Posteingang.
    Userbild
    Wenn ich das ganze nochmal ausprobiere z.B 50 Zeilen weiter unten landen sie nur noch im Entwurfsordener.
    Aber da schau ich nochmal, vielleicht gibts da ne simple erklärung und lösung für.
    Also nochmal
    VIELEN, VIELEN DANK !!!!!!!!!!!
    christian

    AW: es funktioniert ...
    Matthias
    Hallo Christian,
    Freut mich, dass ich dir dann letztendlich doch helfen konnte.
    Falls das mit Outlook nix wird melde dich nochmal wegen des DOS-Programms (Blat). Das kann Excel mit VBA bedienen, wenn du willst auch ohne dass irgendein Fenster aufgeht.
    Viele Grüße,
    Matthias

    Alternativlösung früher als gedacht nötig
    greenhorn
    Hallo,
    ich hab jetzt hin und her probiert, auch mal zum kollegen geschickt, es funzt leider nich.
    sch*** outlook (tschuldige)
    Vielleicht kann ich nochmal deine Hilfe in Anspruch nehmen betreffs des DOS-Programms (Blat)?
    christian

    AW: Alternativlösung früher als gedacht nötig
    Matthias
    Hi Christian,
    also erstmal Blat herunterladen:
    http://www.blat.net/
    Du brauchst die Dateien blat.exe, blat.dll und blat.lib.
    Dann in ein neues (leeres), allgemeines Modul diesen Code:
    
    Option Explicit
    Private Declare Function CharToOemA Lib "user32.dll" (ByVal _
    lpszSrc As String, ByVal lpszDst As String) As Long
    Public Function ANSItoASCII(ByVal Text As String) As String
    Call CharToOemA(Text, Text)
    ANSItoASCII = Text
    End Function
    Public Sub SendMail(xTo As String, xSubject As String, xBody As String, Optional xAttach = "")
    Dim tID As Double
    Dim ff As Integer
    Dim fn As String
    Dim cmd As String
    Dim pfad As String, pfad2 As String
    Dim ret As Long
    ' ### folgende Konstanten müssen angepasst werden!! ###
    Const xServer = "smtp.domain.de"   'SMTP-Server
    Const xUser = "username"           'Username
    Const xPassword = "password"       'Passwort
    Const xFrom = "absender@domain.de" 'Absenderadresse
    'Pfade b.B. auch anpassen, voreingestellt ist hier der Pfad der Excel-Mappe:
    pfad = ThisWorkbook.Path 'hier steht das Programm blat.exe
    pfad2 = ThisWorkbook.Path 'hier wird mailbody.txt erzeugt, also Schreibrecht benötigt!
    'Mailbody in Textdatei scheiben
    ff = FreeFile
    Open pfad2 & "\mailbody.txt" For Output As ff
    Print #ff, xBody
    Close ff
    'Shell-Befehl zusammenbauen:
    cmd = """" & pfad & "\blat.exe"" """ & pfad2 & "\mailbody.txt"" -server " & _
    xServer & " -u " & xUser & " -pw " & xPassword & " -f """ & _
    xFrom & """ -to " & xTo & " -s """ & xSubject & """"
    'bei Bedarf auch den Anhang:
    If xAttach  "" Then _
    cmd = cmd & " -attach """ & xAttach & """"
    cmd = ANSItoASCII(cmd)
    'BLAT.EXE ausführen
    ret = Shell(cmd, vbNormalFocus) 'wenn dich das DOS-Fenster nervt verwende vbHide statt  _
    vbNormalFocus
    End Sub
    


    Testen kannst du das ganze mit diesem Makro:

    
    Sub Test()
    SendMail "empfaenger@mail.de", "Betreff", "Mailtext..."
    End Sub
    


    Du brauchst natürlich die Daten für das Mailkonto, also Server, Username und Passwort sowie Absender-Adresse. Schau Dir die Kommentare im Code an!
    Viel Erfolg,
    Matthias

    AW: Alternativlösung früher als gedacht nötig
    greenhorn
    ok mach ich, werde es aber heute wahrscheinlich nich mehr fertig bekommen.
    Ich geb am Montag ne rückmeldung, dann wieder links im Thread =)
    christian

    AW: Email automatisch aus Excel versenden
    greenhorn
    bin heute aber auch schwer von begriff, danke für die geduld und das verständnis.
    Ok, das habe ich jetzt so gemacht.
    
    In Projektexplorer Doppelklick auf Tabelle1 (Messwerte) dann hier reinkopieren.
    


    Im Klassenmodul stehen jetzt wieder die ganzen anweisungen zum senden der mail:

    
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("AK:AK")) Is Nothing Then
    'Wenn Wert ungleich "0" --> Störung:
    If Range("AK:AK") > 0 Then sende_stoermeldung_drehzahl_hoch
    End If
    If Not Intersect(Target, Range("AL:AL")) Is Nothing Then
    'Wenn Wert ungleich "0" --> Störung:
    If Range("AL:AL") > 0 Then sende_stoermeldung_drehzahl_niedrig
    End If
    usw.
    


    und im modul stoermelde das hier:

    
    Sub sende_stoermeldung_drehzahl_hoch()
    Dim MyMessage As Object, MyOutApp As Object
    'InitializeOutlook = True
    Set MyOutApp = CreateObject("Outlook.Application")
    'Nachrichtenobject erstellen
    Set MyMessage = MyOutApp.CreateItem(0)
    With MyMessage
    .To = "me@provieder.de"
    .Subject = "automatische Stoermeldung: Motordrehzahl hoch" & Date & Time
    'Hier wird eine normale Text Mail erstellt
    .body = "Es ist eine Störung eingetreten" & vbCrLf & "Motordrehzahl hoch"
    'Hier wird die Mail nochmals angezeigt
    .Display
    .Save
    SendKeys "%S"
    End With
    MyOutApp.Quit
    Set MyOutApp = Nothing
    Set MyMessage = Nothing
    End Sub
    usw. für jede einzelne störung
    


    wie kann ich jetzt testen?

    noch ne idee, kann man outlook sagen ...
    greenhorn
    Sende alle dateien im Ordner "Entwürfe" ab?
    Aber ich denke mal das da nichts mehr mit VBA zu machen is, oder?
    (Nur ne Idee!)
    Hab wieder links im Thread begonnen, sonst kann man ja nichts mehr lesen =)

    AW: noch ne idee, kann man outlook sagen ...
    Matthias
    Hi,
    wie gesagt, Outlook ist nicht meins.
    Das mit blat ist schon schick, man braucht überhaupt kein e-Mail-Programm installiert zu haben.
    Gruß Matthias

    am montag dann mit blat
    greenhorn
    hallo Matthias,
    ok dann probier ich das am montag mit blat.
    meld mich dann wieder hier.
    christian

    sieht kompliziert (für mich) aus ...
    greenhorn
    Hallo und guten Morgen,
    ich hab mir nochmal deinen Code den ich in neues Modul schreiben soll angeschaut.
    Einiges muss ich leider noch nachfragen.
    
    ' ### folgende Konstanten müssen angepasst werden!! ###
    Const xServer = "smtp.domain.de"   'SMTP-Server
    Const xUser = "username"           'Username
    Const xPassword = "password"       'Passwort
    Const xFrom = "absender@domain.de" 'Absenderadresse
    


    Bis auf SMTP hab ich alles, SMTP bekomme ich aus den Eigenschaften von Outlook, oder?

    
    'Pfade b.B. auch anpassen, voreingestellt ist hier der Pfad der Excel-Mappe:
    pfad = ThisWorkbook.Path 'hier steht das Programm blat.exe
    pfad2 = ThisWorkbook.Path 'hier wird mailbody.txt erzeugt, also Schreibrecht benötigt!
    


    Muss ich "pfad" durch den Pfad ersetzten? Wie z.B. C:\Dokumente und Einstellungen\Eigene Dateien\Eigene Bilder ?

    
    'Mailbody in Textdatei scheiben
    ff = FreeFile
    Open pfad2 & "\mailbody.txt" For Output As ff
    Print #ff, xBody
    Close ff
    


    Der Mailbody ist ja sozusagen 15mal variabel, lege ich jetzt 15 verschiedene Text-Dateien an?
    Oder wie mache ich das.

    
    'Shell-Befehl zusammenbauen:
    cmd = """" & pfad & "\blat.exe"" """ & pfad2 & "\mailbody.txt"" -server " & _
    xServer & " -u " & xUser & " -pw " & xPassword & " -f """ & _
    xFrom & """ -to " & xTo & " -s """ & xSubject & """"
    'bei Bedarf auch den Anhang:
    If xAttach  "" Then _
    cmd = cmd & " -attach """ & xAttach & """"
    cmd = ANSItoASCII(cmd)
    'BLAT.EXE ausführen
    ret = Shell(cmd, vbNormalFocus) 'wenn dich das DOS-Fenster nervt verwende vbHide statt  _
    vbNormalFocus
    End Sub
    


    schonmal danke
    christian

    AW: sieht kompliziert (für mich) aus ...
    Matthias
    Hi Christian,
    1.)
    den SMTP-Server kannst du entweder bei Outlook nachschauen, wenn's da schon korrekt drinsteht, oder auf der Webseite deines Mailproviders irgendwo unter Hilfe - Email-Programm konfigurieren.
    2.)
    Pfad = ....
    Pfad2 = ...
    ...muss stehenbleiben, bei mir habe ich alles in den Ordner, in dem die Mappe steht, also ThisWorkbook.Path. Solltest du Blat (die 3 Dateien) in einen anderen Ordner gestellt haben, musst du diesen bei "Pfad =" angeben.
    "Pfad2" muss irgendein Ordner mit Schreibrechten sein, also ThisWorkbook.Path passt eigentlich schon.
    3.)
    Ich habe die Prozedur ja so aufgebaut:
    
    Public Sub SendMail(xTo As String, xSubject As String, xBody As String, Optional xAttach = "")
    


    Das heißt, der Test der eMail wird beim Aufruf als Argument übergeben. Wenn du also in der Worksheet_Change()-Prozedur dies stehen hast:

    
    If z.Value > GW(i) Then
    'letzten 2 Minuten prüfen (alle 10 Sekunden ein Wert also 12 Werte):
    z1 = Application.Max(z.Row - 12, Zeile1) '12 Zeilen hoch, höchstens bis [Zeile1] wg. Ü _
    berschriften
    If WorksheetFunction.Max(Range(Cells(z1, z.Column), z.Offset(-1, 0))) 


    Dann siehst du die mit NEU gekennzeichnete Zeile, die du entsprechend ersetzen musst, also:

    
    SendMail _
    "empaenger@domain.de", _
    "automatische Stoermeldung: " & Cells(ZeileMeldung, Sp(i)) & " " & Date & Time, _
    Cells(ZeileMeldung, Sp(i))
    


    Du gibst also der Sendmail-Prozedur die Argumente Betreff und Mailtest gleich mit.
    So, nun probier mal.
    Viel Erfolg,
    Matthias

    neue aufgaben
    greenhorn
    ich probier mich auf jeden Fall weiter mit dem ganzen, da ich das ganze besser als outlook finde wenn das so geht.
    Muss aber die nächsten Tage ertmal was anderes bearbeiten.
    Ich geb aber ne Rückmeldung zu dem hier.
    Schon mal
    VIELEN, VIELEN DANK !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    wie du vielleicht in meinem anderen thread erkannt hast habe ich die outlook-problematik nochmals gepostet, das liegt daran das meine "oberen" dies vorerst favorisieren (da muss ich noch überzeugungsarbeit leisten =) )
    Also ich komme zu gegebener Zeit darauf zurück.
    christian

    305 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige