Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Excel E-Mail versenden wenn wert unterschritte

Forumthread: VBA Excel E-Mail versenden wenn wert unterschritte

VBA Excel E-Mail versenden wenn wert unterschritte
30.05.2016 09:41:20
Benne
Hallo Liebe Excelfreunde,
ich arbeite schon sehr lange (mit einer längeren Pause) an einem Problem und bin auch bereit, nach diesem letzten Versuch aufzugeben. Vielleicht ist hier noch ein netter Tüftler. Ich hatte das Problem auch schon in Foren veröffentlicht, hatte aber immer wieder eine Fehlermeldung bekommen. Jetzt versuche ich es so detailliert wie möglich zu beschreiben.
Ausgangssituation:
Ich arbeite für einen sozialen Träger, der Dienstleistungen am Klienten anbietet. Dafür wird über einen bestimmten Zeitraum von einem Auftraggeber Arbeitszeitstunden angeboten, die eine Fachkraft bedient, und es muss vor Beendigung der Maßnahme ein Bericht angefertigt werden.
Hier die Mappe in sehr abgespeckter Version, da sie sonst zu groß ist:
https://www.herber.de/bbs/user/105859.xlsx
Problembeschreibung:
Der Job ist für Mitarbeiter sehr stressbelastet, was dazu führen kann, dass Mitarbeiter immer wieder die bewilligten Arbeitszeitstunden überziehen und auch der Bericht vergessen wird rechtzeitig anzufertigen.
Lösung:
EXCEL….Die angefertigte Excelmappe hilft dabei. Die Bewilligten Stunden werden monatlich berechnet und durch bedingte Formatierung werden Warnungen angezeigt, die mich darauf hinweisen, dass die Stunden bald ablaufen, oder Berichte anzufertigen sind. Funktioniert gut…
Der Mitarbeiter wird dann von mir per Mail gewarnt und es konnten schon einige Überziehungen verhindert werden.
Jetzt möchte ich allerdings einen Schritt weiter gehen.
Ich habe mich schon durch sämtliche Foren gekämpft und diverse Lösungen ausprobiert. Komme aber nicht zu einer Lösung (Hätte es fast geschafft, aber dann war das VBA zu lang)
Folgendes soll via VBA umgesetzt werden:
Wenn in Zelle N4 die Stundenzahl unter 20 beträgt, soll automatisch (mit vorgegebenen Text und nach Drücken auf den Button „E-Mail Senden“) eine Mail an den Adressaten in Zelle R4 versendet werden. Funktioniert auch wenn ich es wie folgt aufbaue:
Sub e_mailSenden()
Dim olApp As Object
Dim objMail As Object
If Range("N4").Value 0 Then
Set olApp = CreateObject("Outlook.Application")
Set objMail = olApp.CreateItem(olMailItem)
With objMail
.To = Sheets("Fallübersicht").Range("R4").Value
.Subject = "Achtung Poolstunden bald aufgebraucht"
.Body = "Liebe Kollegin/Lieber Kollege," & vbNewLine & vbNewLine & "der Stundenpool bei " & Sheets("Fallübersicht").Range("B4").Value & " weißt nur noch " & Sheets("Fallübersicht").Range("N4").Value & " Reststunden auf." & vbNewLine & "Dies ist eine automatische Benachrichtigung."
.Display 'zeigt die Mail nur an - du musst auf Senden klicken
'.Send 'legt die Mail gleich in den Postausgang
End With
End If
Zudem wird in Zelle O4 ein Status abgefragt. Bei zutreffen erscheint dort „Bericht fällig“. Auch hier soll eine Meldung erfolgen.
Auch dies funktioniert, wie folgt:
If Range("O4").Value = "Bericht fällig" Then
Set olApp = CreateObject("Outlook.Application")
Set objMail = olApp.CreateItem(olMailItem)
With objMail
.To = Sheets("Fallübersicht").Range("R4").Value
.Subject = "Achtung Bericht fällig"
.Body = "Liebe Kollegin/Lieber Kollege," & vbNewLine & vbNewLine & "die Hilfemaßnahme bei " & Sheets("Fallübersicht").Range("B4").Value & " läuft bald aus und der Bericht ist somit fällig." & vbNewLine & "Dies ist eine automatische Benachrichtigung."
.Display 'zeigt die Mail nur an - du musst auf Senden klicken
'.Send 'legt die Mail gleich in den Postausgang
End With
End If 'Ende Zeile
Mein Problem war (und ist) an dieser Stelle, dass die Befehle sich für die weiteren Zeilen wiederholen und ich kein zusammenfassendes VBA hinbekommen habe (es gab immer Fehlermeldung). Somit kam ich auf die glorreiche Idee, Das VBA immer wieder zu Kopieren. Als ich fertig war, bekam ich die Fehlermeldung, dass das VBA zu lang sei. Somit benötige ich eine kürzere Lösung. So…jetzt solltet ihr mein Problem kennen. Ich benötige ein wie oben beschriebenes VBA, dass für den Zellenbereich „Buchstabe“4 : „Buchstabe“103 funktioniert.
Habt Ihr eine Idee?

Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Excel E-Mail versenden wenn wert unterschritte
30.05.2016 11:34:33
Michael
Hallo Benedikt!
Deine Bsp-Datei angepasst, bitte teste mal: https://www.herber.de/bbs/user/105862.xlsm
Ich habe Dir auch die Spalte "erledigt" angepasst, damit Du dort keine Checkboxen verwenden musst. Doppelklick in die Zellen setzt oder entfernt ein Häkchen.
Makros liegen im allgemeinen Modul1 bzw. im Klassenmodul der Tabelle1.
LG
Michael

Anzeige
AW: VBA Excel E-Mail versenden wenn wert unterschritte
30.05.2016 20:13:00
benne
Vielen Dank...Deine Tabelle funktioniert Super. Allerdings muss ich das VBA in meine Mappe übertragen. Dabei hat die Tab einen anderen Namen, denn ich auch richtig umtrage. Dann bekomme ich beim ausführen eine Fehlermeldung:
Laufzeitfehler 13
Typen unverträglich
Muss an der Mappe liegen, da es bei der Umbezeichnung auf andere Mappe wieder funktioniert.
Ich habe da eine WENN DANN Formel in N4 - N103 und eine begingte Formatierung. Beides mal rausgenommen. Aber daran liebt es nicht.
Es wird folgender Bereich beim Debuggen gelb markiert im VBA:
Call Reststunden(Ma.Offset(, 4).Value, Ma.Offset(, -12).Value, Ma.Value)
Hast du da auch noch eine Idee?
Vielen lieben Dank schonmal. Ich bin bis hierhin begeistert.

Anzeige
AW: VBA Excel E-Mail versenden wenn wert unterschritte
31.05.2016 07:03:17
Michael
Hallo!
Freut mich. Die bedingte Formatierung ist egal, aber bzgl. der Formel ab N4 hab ich noch eine Frage:
- steht die Formel bereits in allen Zellen bis N103, auch wenn in der jeweiligen Zeile keine anderen Eintragungen vorhanden sind?
- zeigt die Formel eine leere Zelle, wenn in der Zeile keine weiteren Eintragungen vorhanden sind?
Lässt sich sicher noch lösen...
Gib Bescheid
Michael

Anzeige
AW: VBA Excel E-Mail versenden wenn wert unterschritte
31.05.2016 07:36:37
benne
Hallo Michael,
erstmal vielen Dank, dass du Dir die Zeit nimmst.
Beide Fragen kann ich nur mit "Ja" beantworten.
Von Zelle N4 - N103 zieht sich folgende Formel durch:
= WENN(Hilfstabelle!A3=1;SUMME(Fallübersicht!H4-Fallübersicht!M4);WENN(Hilfstabelle!A3=2; SUMME(Fallübersicht!J4-Fallübersicht!M4);0))
Wie du siehst, zieht sich die Formel noch Daten aus einer anderen Tabelle (Hilfstabelle). Hoffe das macht keine Probleme.
Zu Deiner zweiten Frage kann ich auch nur sagen, dass nichts in der Zelle angezeigt wird, wenn in der Spalte nichts eingetragen ist. Auch die Nullen habe ich durch die Optionen (Häckchen entfernt) nicht anzeigen lassen.

Anzeige
AW: VBA Excel E-Mail versenden wenn wert unterschritte
31.05.2016 10:13:09
Michael
Hallo!
Bsp-Datei ergänzt, teste mal: https://www.herber.de/bbs/user/105885.xlsm
Ich hab Dir in den Codes auch noch ein paar (kurze) Kommentare hinzugefügt - Du kannst nun das betroffene Tabellenblatt selbständig im Code ändern; entsprechende Stelle findest Du gem. Kommentar.
Der Code für die Kontroll-Häkchen (Doppelklick) muss natürlich auch immer in das Klassenmodul jenes Tabellenblattes kopiert werden, in dem er gelten soll. In der o.a. Datei ist das Tabellenblatt "Fallübersicht"; musst Du ggf. verschieben, Kommentar ist dabei.
LG
Michael

Anzeige
AW: VBA Excel E-Mail versenden wenn wert unterschritte
31.05.2016 13:17:37
Benne
Lieber Michael,
es FUNKTIONIERT!!!! Ich bin voller freude. Wenn du in der nähe von Lübeck lebst, kannst du gerne mal reinschauen und eine Flasche Wein rausholen (außer du bist minderjährig). Oder kann ich sonst was für dich tun?
Vielen vielen Dank. Seit Monaten suche ich immer wieder eine Lösung.
Ach nochwas...woher wusstest du eigentlich meinen Namen? Ist der auf der Mappe irgentwo einzulesen?

Anzeige
AW: VBA Excel E-Mail versenden wenn wert unterschritte
31.05.2016 13:37:53
Michael
Hallo!
Das freut mich! Wundert mich allerdings, dass Du solange nach einer Lösung gesucht hast - ich hab da kein Hexenwerk vollbracht, im Grunde nur Deinen Code bereinigt und in eine Schleife gebettet; das können wahrlich Andere, viele Andere auch :-).
woher wusstest du eigentlich meinen Namen? Ist der auf der Mappe irgentwo einzulesen?
Ja, sofern Du beim Einrichten von Office einen Benutzernamen angegeben hast (bzw. das Admin-seitig so eingerichtet wurde), findest Du diesen im Menüband unter Datei - Autor. Wenn Du da sichergehen willst, dass das nicht sichtbar wird, musst Du "Eigenschaften und persönliche Informationen" aus der Datei entfernen, bevor Du sie hochlädst. Das ist im Übrigen bspw. auch und gerade bei ins Netz geladenen Bildern interessant und tlw. ratsam. Das Ganze geht mit Windows Bordmitteln in ein paar Klicks (Windows 7, davor weiß ich nicht, danach bin ich nicht sicher, wie es geht): Rechtsklick auf die Datei, Eigenschaften, Details, unten auf "Eigenschaften und persönliche Informationen" klicken und dann "Folgende Eigenschaften aus der Datei entfernen" wählen, Alle auswählen und OK. Fertig!
Danke auch für das Wein-Angebot... wird allerdings schwierig, denn das sind dann zu mir nach Ö gute 1000km ;-). Aber falls Du Dich für die Hilfe erkenntlich zeigen willst, ein anderer Vorschlag: Spende doch den Gegenwert des Weines (oder einer Kiste Bier) einem guten Zweck Deiner Wahl (Flüchtlingshilfe?).
außer du bist minderjährig
Das geht sich schon länger nicht mehr aus...
LG
Michael

Anzeige
AW: VBA Excel E-Mail versenden wenn wert unterschritte
31.05.2016 15:26:59
Benne
O.K. ich werde das machen. Allerdings hast du schon dafür gesorgt. Wir sind ein freier Träger der Jugendhilfe und bieten u.a. genau für diese Flüchtlinge gesonderte Hilfemaßnahmen an. Die Datei, die Du für mich bearbeitet hast erfüllt seinen Teil für diese Flüchtlingsarbeit und unser Träger lebt u.a. von den besagten Spenden. Lieben Gruß... und danke nochmal...

Anzeige
AW: VBA Excel E-Mail versenden wenn wert unterschritte
31.05.2016 15:46:34
Michael
Hallo!
Allerdings hast du schon dafür gesorgt. Wir sind ein freier Träger der Jugendhilfe
Dann freut's mich natürlich besonders.
Lieben Gruß... und danke nochmal...
Ebenso und gerne!
LG
Michael
;
Anzeige
Anzeige

Infobox / Tutorial

E-Mail Benachrichtigung in Excel mit VBA


Schritt-für-Schritt-Anleitung

  1. Öffne deine Excel-Datei und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject (deinDateiname)" und wähle Einfügen > Modul.

  3. Kopiere den folgenden VBA-Code in das Modul:

    Sub e_mailSenden()
       Dim olApp As Object
       Dim objMail As Object
       Dim ws As Worksheet
       Set ws = ThisWorkbook.Sheets("Fallübersicht")
    
       Dim i As Integer
       For i = 4 To 103 ' Bereich von N4 bis N103
           If ws.Cells(i, 14).Value < 20 Then ' N-Spalte
               Set olApp = CreateObject("Outlook.Application")
               Set objMail = olApp.CreateItem(0) ' olMailItem
               With objMail
                   .To = ws.Cells(i, 18).Value ' R-Spalte
                   .Subject = "Achtung Poolstunden bald aufgebraucht"
                   .Body = "Liebe Kollegin/Lieber Kollege," & vbNewLine & _
                            "der Stundenpool bei " & ws.Cells(i, 2).Value & _
                            " weist nur noch " & ws.Cells(i, 14).Value & " Reststunden auf." & vbNewLine & _
                            "Dies ist eine automatische Benachrichtigung."
                   .Display ' zeigt die Mail an
                   ' .Send ' sendet die Mail direkt
               End With
           End If
    
           If ws.Cells(i, 15).Value = "Bericht fällig" Then ' O-Spalte
               Set olApp = CreateObject("Outlook.Application")
               Set objMail = olApp.CreateItem(0) ' olMailItem
               With objMail
                   .To = ws.Cells(i, 18).Value ' R-Spalte
                   .Subject = "Achtung Bericht fällig"
                   .Body = "Liebe Kollegin/Lieber Kollege," & vbNewLine & _
                            "die Hilfemaßnahme bei " & ws.Cells(i, 2).Value & _
                            " läuft bald aus und der Bericht ist somit fällig." & vbNewLine & _
                            "Dies ist eine automatische Benachrichtigung."
                   .Display ' zeigt die Mail an
                   ' .Send ' sendet die Mail direkt
               End With
           End If
       Next i
    End Sub
  4. Schließe den VBA-Editor und speichere die Datei als .xlsm (Excel-Arbeitsmappe mit Makros).

  5. Füge einen Button hinzu, um das Makro auszuführen: Gehe zu Entwicklertools > Einfügen > Button. Weise das Makro e_mailSenden zu.


Häufige Fehler und Lösungen

  • Laufzeitfehler 13 (Typen unverträglich):

    • Überprüfe, ob in den Zellen, die du abfragst (N4 bis N103), tatsächlich numerische Werte stehen und keine Textwerte.
    • Stelle sicher, dass die Tabellennamen im VBA-Code mit den tatsächlichen Tabellennamen übereinstimmen.
  • Outlook öffnet sich nicht:

    • Stelle sicher, dass Outlook korrekt installiert und konfiguriert ist.
    • Prüfe, ob Makros in Excel aktiviert sind.

Alternative Methoden

Eine einfache Möglichkeit, eine E-Mail-Benachrichtigung zu implementieren, ist die Verwendung von Excel-Bedingter Formatierung. Du kannst Zellen so formatieren, dass sie rot werden, wenn der Wert unter 20 fällt. Kombiniert mit einer einfachen Formel zur E-Mail-Benachrichtigung könnte dies ein einfacherer Ansatz sein, wenn VBA nicht erforderlich ist.


Praktische Beispiele

  • Beispiel für die Verwendung von VBA zur E-Mail-Benachrichtigung: Wenn der Wert in Zelle N4 – N103 unter 20 fällt, wird automatisch eine E-Mail an die Adresse in Zelle R4 gesendet.

  • Anpassung des Codes für verschiedene Mitarbeiter: Du kannst den Code so anpassen, dass er für unterschiedliche Mitarbeiter oder Abteilungen funktioniert, indem du die entsprechenden Zellen in der Schleife änderst.


Tipps für Profis

  • Verwende Application.ScreenUpdating = False zu Beginn deines Makros, um das Flackern des Bildschirms zu vermeiden. Setze es am Ende wieder auf True.

  • Teste den Code zuerst in einer Testdatei, um sicherzustellen, dass alles wie gewünscht funktioniert, bevor du ihn in deiner Hauptdatei verwendest.

  • Nutze Kommentare im Code, um die Funktionsweise zu erklären, falls du oder jemand anders später den Code bearbeiten möchte.


FAQ: Häufige Fragen

1. Wie kann ich den VBA-Code anpassen, um zusätzliche Bedingungen hinzuzufügen? Du kannst neue If-Anweisungen innerhalb der For-Schleife hinzufügen, um weitere Bedingungen für die E-Mail-Benachrichtigung zu prüfen.

2. Warum funktioniert der Button nicht? Stelle sicher, dass das Makro korrekt zugewiesen ist und dass die Excel-Datei als Makro-fähige Datei gespeichert wurde. Kontrolliere auch die Makrosicherheitseinstellungen in Excel.

3. Kann ich den Code für andere Zellen anpassen? Ja, du kannst die Zellreferenzen im Code einfach anpassen, um andere Bereiche in deiner Excel-Datei zu überwachen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige