Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1360to1364
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
VBA Email senden
20.05.2014 13:18:49
Marcy
Hallo zusammen,
um durch die Vorarbeiter einfacher die AV über Fehleile zu informieren, wäre folgende VBA cool.
Überall werden Listen geführt, danach wird dann zusätzlich die AV informiert und und und, alles umständlich.
Sub Emailsenden ()
1) Suche in Spalte H ab Zeile 18 die erste freie Zelle, wenn in dieser Zeile in Spalte I bereits ein Eintrag ist.
2) Nehme diese Zeile und kopiere A:J
3) Füge den Zwischenspeicher an gleicher Stelle als INHALTE wieder ein (damit die ganzen Formeln verschwinden und die Liste mit der Zeit nicht immer langsamer wird)
4)Verwende aus dieser Zeile in Spalte I den Inhalt als Betreff für die Email.
5) Sende eine Email (Outlook) an die in dieser Zeile in J stehenden Emailadressen (sie werden aus anderen Zellen vorher gezogen, damit man einfacher Zugriff auf den Verteiler hat. Die stehen z.B. so da mustermann1@....de; mustermann2@....de
6) Schreibe in dieser Zeile in Spalte H das Datum von jetzt.
PS: Die Email selber braucht keinen eigenen Inhalt, die Info über das Fehlteil erfolgt über den Betreff, in dem Maschinennummer, Identnummer usw. vorhanden sind.
Sub Ende
zusätzlich
befor close
1) prüfe, ist in der letzten gefüllten Zeile in Spalte I auch ein Eintrag in Spalte H?
2a) Wenn ja, wurden alle Fehlteile gesendet, MsBox "alles gemeldet" und schließen erlauben.
2b) wenn nicht MsgBox "Es wurden nicht alle Fehlteile gesendet"
3) Ausführen von Sub Emailsenden ()
Ich hoffe es ist verständlich.
Noch mal kurz anders
- Ist in H & I ein Eintrag, wurde eine Email bereits versendet.
- Ist in H kein Eintrag, aber in I, wurde ein Fehlteil in die Liste eingetragen, aber nicht gesendet (in H trägt das VBA Punkt 6) von oben das Datum).
- Ist weder in H noch in I ein Eintrag, wurde kein weiteres Fehlteil eingetragen.
Bin mal gespannt
Gruß Marcy

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Email senden
20.05.2014 13:53:14
Oberschlumpf
Hi Marcy
Das, was du so möchtest, wie du es beschreibst, nennt sich Auftragsprogrammierung.
Wieviel würdest du denn bezahlen?
Ciao
Thorsten

AW: VBA Email senden
20.05.2014 14:00:35
Marcy
Hallo Thorsten,
kann ich leider nicht.
Bin hier in der Firma nur immer wieder der Depp, der in Excel weiter ist wie viele Andere.
Daher kommen immer wieder viele zu mir, die mich um was bitten.
Excel ist hier nicht meine Aufgabe, verdiene damit auch nichts (wäre es so, könnte ich es sicher selber), möchte nur meinen Kollegen helfen.
Aber keine Sorge, mir wird bestimmt geholfen, kenne einen guten Excel Gott, den ich aber nicht immer aus seiner Arbeit reißen will.
Schöne Grüße aus Asbach ;-)
Gruß Marcy

Anzeige
AW: VBA Email senden
20.05.2014 13:53:32
Marcy
Ergänzung zu Emailsenden
7) wiederhole diesen Vorgang solange, bis Spalte H & I in gleicher Zeile gefüllt sind.
Es wird so sein, dass uber den Tag hinweg die Fehleile eingetragen werden und erst am Abend gesendet werden.

AW: VBA Email senden
20.05.2014 14:23:25
Klaus
7) wiederhole diesen Vorgang solange, bis Spalte H & I in gleicher Zeile gefüllt sind.
nimm das "Exit For" aus meinem Makro raus, dann läuft es die gesamte Tabelle durch und generiert jeweils eine Mail für jede H&I Kombination.
Es wird so sein, dass uber den Tag hinweg die Fehleile eingetragen werden und erst am Abend gesendet werden.
dann verstehe ich nicht, wozu das "before Close" da sein soll ...
Grüße,
Klaus M.vdT.

Anzeige
AW: VBA Email senden
20.05.2014 14:30:16
Marcy
Hallo Klaus,
erst mal vielen Dank.
Befor Close soll einfach die Sicherheit geben, dass beim Schließen in jedem Fall alles gesendet wurde.
Wie gesagt, ich kann schon nicht viel mit Excel, für die die Liste ist, die können noch weniger :-)
Meistens ist die Liste den ganzen Tag offen und wird erst am Abend geschlossen.
Du, ich und viele andere hier im Forum würden es einfach erkennen ob alles gesendet wurde, die User hierfür nicht so.
Gruß Marcy

AW: VBA Email senden
20.05.2014 14:21:06
Klaus
Hi,
das Mail-senden ist einfach, Makro siehe unten. Für den "Before Close" Teil habe ich keine Zeit :-)
Option Explicit
Sub SendAutoMail()
Dim sText As String
Dim sTo As String
Dim sCC As String
Dim sSubject As String
sTo = ""
sCC = ""   'sCC, wenn du möchtest ....
sText = "" 'kein Text, wie gewünscht
sSubject = ""
Dim lRow As Long
Dim r As Range
With Sheets("Tabelle1")
lRow = .Cells(.Rows.Count, 8).End(xlUp).Row
If lRow >= 18 Then                                      'ab Zeile 18
For Each r In .Range("H18:H" & lRow)
If r.Value = "" Then                            'in H kein Eintrag
If Not r.Offset(0, 1).Value = "" Then       'in I ist ein Eintrag
.Range("A" & r.Row & ":J" & r.Row).Copy         'Formeln mit Werten ü _
berschreiben
.Range("A" & r.Row).PasteSpecial xlPasteValues
Application.CutCopyMode = False
sSubject = r.Offset(0, 1).Value         'Inhalt I als Subject
sTo = r.Offset(0, 2).Value              'Inhalt J als Mailto
Call SendSheetOutlook(sSubject, sTo, sCC, sText)
r.Value = Date                          'Datum einfügen
Exit For                                'gefunden, ENDE
End If
End If
Next r
End If
End With
End Sub
Private Sub SendSheetOutlook(sSubject As String, sTo As String, sCC As String, sText As String)
Dim olApp         As Object
Dim olOldBody     As String
'Make Email
Set olApp = CreateObject("Outlook.Application")
With olApp.CreateItem(0)
.GetInspector.Display
olOldBody = .htmlBody
.To = sTo
.cc = sCC
.Subject = sSubject
.htmlBody = sText & olOldBody
End With
End Sub
Wenn du nicht nur für den ersten Eintrag senden willst sondern für alle einträge, entferne diese Zeile:
Exit For
Grüße,
Klaus M.vdT.

Anzeige
und? läuft es?
21.05.2014 11:58:42
Klaus
Hallo Marcy,
über eine Rückmeldung würd ich mich schon noch freuen ...
Grüße,
Klaus

AW: und? läuft es?
21.05.2014 12:05:26
Marcy
Hallo Klaus,
ne noch nicht so richtig.
Bin noch am versuchen es zu lösen.
Rückmeldung wäre natürlich gekommen, wollte aber erst selber fummeln und nicht gleich fragen.
Du schriebst keine Zeit.
1x einziges Mal, wurde ein Datum in H geschrieben, Zeile kopiert und Werte eingefügt, eine Email wurde auch erstellt, senden musste ich aber manuell.
Aber danach nicht mehr.
Ich sehe auch nicht ob das Makro läuft oder zuende ist.
Habe die MsgBox eingebaut. Bis zu dieser Stelle kommt die Meldung geht, eine Zeile weiter unten nicht mehr.
lRow = .Cells(.Rows.Count, 8).End(xlUp).Row
MsgBox "geht"
Gruß Marcy

Anzeige
AW: und? läuft es?
21.05.2014 13:02:05
Klaus
1x einziges Mal, wurde ein Datum in H geschrieben, Zeile kopiert und Werte eingefügt,
wie ich schrieb, das Makro sucht nur den ersten Eintrag und bricht dann ab - die Zeile "Exit For".
eine Email wurde auch erstellt, senden musste ich aber manuell.
Das du manuell senden musst, ist auch Absicht! Ich halte nichts davon, mails komplett automatisiert zu versenden - da muss nur mal ein User die Tabelle zerschießen und schon sendet es tausende von Mails ohne dass du es merkst!
GEHT natürlich schon, aber lass uns das erst umstellen wenn die Testphase um ist.
Du schriebst keine Zeit.
Das war gestern :-)
Lad doch mal eine anonymisierte Datei mit deinem Stand-bis-jetzt hoch. Ein dutzend Zeilen, von denen 2 oder 3 Mails generiert werden sollen, müssten reichen. Es sei denn natürlich jetzt ist dein Ehrgeiz gepackt und du willst es selber herausbekommen!
Grüße,
Klaus M.vdT.

Anzeige
AW: und? läuft es?
21.05.2014 13:28:12
Marcy
https://www.herber.de/bbs/user/90772.xlsm
Ergeiz schon gepackt, aber wie gesagt, Excel ist nicht meine Aufgabe.
Versuch dann mittendrin immer wieder mal. dann kommt was anderes und und und.
Vermutlich für Dich eine Kleinigkeit.
Dann verstehe ich vermutlich viel schneller.
Bin gespannt
Gruß Marcy

Kleinigkeit :-)
21.05.2014 13:47:14
Klaus
Hallo Marcy,
suche diese Zeile (recht weit oben, direkt das erste Des "With SHeets"-Block)
lRow = .Cells(.Rows.Count, 8).End(xlUp).Row
und korrigiere sie gegen:
lRow = .Cells(.Rows.Count, 9).End(xlUp).Row
und das wars schon :-)
Erklärung:
er ging bis zur letzten Zeile in Spalte H. Das ist aber Blödsinn, da es noch leere Zeilen unter der letzten in Spalte H hat. Durch die Änderung auf "9" geht er jetzt bis zur letzten Zeile in Spalte J jede Zeile in H durch, also auch die leeren für die J schon einen Eintrag hat.
Automatisch senden geht auch, Ergänze im Mail-Makro folgendes::
   With olApp.CreateItem(0)
.GetInspector.Display
olOldBody = .htmlBody
.To = sTo
.cc = sCC
.Subject = sSubject
.htmlBody = sText & olOldBody
.send
End With

ABER: davon rate ich stark ab, aus oben genannten Gründen. Ausserdem gibt's nen Fehler, wenn Outlook die Mail Adresse nicht erkennt.
Grüße,
Klaus M.vdT.

Anzeige
on close ...
21.05.2014 13:51:06
Klaus
Hallo Marcy,
theroretisch kannst du das Makro "on Close" einfach durchlaufen lassen. Wenn keine Mails mehr zu versenden sind, macht das Makro halt nichts (ausser ein paar Sekunden Rechenzeit auf das "on Close" drauf zu schlagen).
Ist zwar nicht ganz sauber, sollte für deine Zwecke aber reichen, oder?
Grüße,
Klaus M.vdT.

AW: on close ...
24.05.2014 12:15:28
Marcy
Hallo Klaus,
ich falle gerade hier noch mal drüber.
Ich verstehe das nicht, habe mich 100%ig zurück gemeldet und bedankt.
Jetzt sehe ich diesen Eintrag aber nicht :-(
Klar ist, das läuft nun dank Deiner Hilfe super.
Habe es noch ein wenig erweitert und übertrifft nun bei Weitem meine Eingangsvorstellung was die Liste können soll.
Beste und liebste Grüße aus Asbach und ein schönes WE
Marcy

Anzeige
Danke für die Rückmeldung! owT.
26.05.2014 07:35:22
Klaus
.

315 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige