Anzeige
Archiv - Navigation
1488to1492
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
Inhaltsverzeichnis

Makro funktioniert nicht - Was muss ich ändern?

Makro funktioniert nicht - Was muss ich ändern?
27.04.2016 12:18:46
Sirka
Hey,
ich brauche eure Hilfe.
ich versuche ein Makro zu schreiben, aber ich bin totaler Anfänger und verstehe nicht wie ich das hinbekomme.
Beim Ausführen des Makros sollen automatisch E-Mail-Vorlagen geöffnet werden, die ich dann manuell abschicken will.
In dem Beispiel unten sollen alle Personen die in Spalte K eine Zahl größer als Null haben eine E-Mail an die in Spalte Q hinterlegte Adresse bekommen. Die richtige Datei hat ca. 400 Zeilen, die alle auf einen Wert größer als Null in Spalte K überprüft werden müssen.
Beispiel für E-Mail:
Spalte A: MustermannMax
Spalte K: 2
Spalte Q: Max.Mustermann@firma.de
Beispiel für keine E-Mail:
Spalte A: MustermannTina
Spalte K: 0
Spalte Q: Tina.Mustermann@firma.de
Das was ich bisher habe habe ich mir zusammenkopiert und mit meinen Daten ergänzt.
In Spalte L wird mir beim ausführen des Makros "Sent" und "Not Sent" angezeigt aber sonst tut sich leider gar nichts. was muss ich ändern, damit die Mail-Entwürfe geöffnet werden?
Option Explicit

Sub Worksheet_Calculate()
Dim FormulaRange As Range
Dim FormulaCell As Range
Dim NotSentMsg As String
Dim MyMsg As String
Dim SentMsg As String
Dim MyLimit As Double
NotSentMsg = "Not Sent"
SentMsg = "Sent"
MyLimit = 0
Set FormulaRange = Range("K2:K8")
On Error GoTo EndMacro:
For Each FormulaCell In FormulaRange.Cells
With FormulaCell
If IsNumeric(.Value) = False Then
MyMsg = "Not numeric"
Else
If .Value > MyLimit Then
MyMsg = SentMsg
If .Offset(0, 1).Value = NotSentMsg Then
Call Mail_with_outlook1(FormulaCell)
End If
Else
MyMsg = NotSentMsg
End If
End If
Application.EnableEvents = False
.Offset(0, 1).Value = MyMsg
Application.EnableEvents = True
End With
Next FormulaCell
ExitMacro:
Exit Sub
EndMacro:
Application.EnableEvents = True
MsgBox "Some Error occurred." _
& vbLf & Err.Number _
& vbLf & Err.Description
End Sub
Sub Mail_with_outlook1(FormulaCell As Range)
Dim OutApp As Object
Dim OutMail As Object
Dim strto As String, strcc As String, strbcc As String
Dim str

Sub As String, strbody As String
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
strto = Cells(FormulaCell.Row, "Q").Value
strcc = ""
strbcc = ""
str

Sub = "offene Punkte"
strbody = "Guten Tag, " & vbNewLine & vbNewLine & "Sie haben " & Cells(FormulaCell.Row, "B"). _
Value & " offene Punkte. Bitte arbeiten Sie diese ab" & _
vbNewLine & vbNewLine & "Mit freundlichen Grüßen," & _
vbNewLine & vbNewLine & "Abteilung XY"
With OutMail
.To = strto
.CC = strcc
.BCC = strbcc
.Subject = strsub
.Body = strbody
.Display
End With
Set OutMail = Nothing
Set OutApp = Nothing
End Sub


Vielen Dank für eure Hilfe!

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

Betreff
Datum
Anwender
Anzeige
Makro funktioniert nicht - Was muss ich ändern?
27.04.2016 12:38:09
Jürgen
Hallo Sirka,
sind diese Abstände in deinem Makro so auch enthalten, oder beim Einfügen ins Forum entstanden?
Dim strto As String, strcc As String, strbcc As String
Dim str
Sub As String, strbody As String
Das sollte doch sicher so aussehen:
Dim strto As String, strcc As String, strbcc As String
Dim strSub As String, strbody As String
Steht in der Spalte L immer "Not send", wenn die Zeile angelegt wird?
Der Outlook-Code wird nur dann gestartet, wenn dort "Not send" steht.
Ist diese LEER, wird Outlook nicht gestartet.
                If .Offset(0, 1).Value = NotSentMsg Then
Call Mail_with_outlook1(FormulaCell)
End If
Ich hoffe ich habe dir geholfen.
Gruß
Jürgen

Anzeige
AW: Makro funktioniert nicht
27.04.2016 13:20:27
Sirka
Hallo Jürgen,
vielen Dank schonmal!
die Abstände sind beim Einfügen entstanden. Im Makro steht es so, wie du es geschrieben hast.
Die Spalte L ist zu Beginn leer. Wenn ich das Makro starte erscheint "Send" und "Not Send". Das ist dann auch richtig zugeordnet. Also bei 0 = "Not Send" und bei allem über Null "Send". Aber eine Mailvorlage öffnet sich nicht (weder bei Send noch bei Not Send in Spalte L) :(

AW: Makro funktioniert nicht
27.04.2016 13:29:53
Jürgen
Hallo Sirka,
trage einmal in der Spalte L (ohne Makro!) "Not send" ein.
Dann starte das Makro. Nun sollte Outlook starten.
Ansonsten stelle im VBa eine Haltepunkt bei
If .Offset(0, 1).Value = NotSentMsg Then
dann siehst du was da geschieht.
Ist die Zelle "leer", startet das call Mail_with... nicht!
Gruß
Jürgen

Anzeige
AW: Makro funktioniert nicht
27.04.2016 13:44:20
Sirka
Hallo Jürgen,
langsam wird es :D
Ich habe
If .Offset(0, 1).Value = NotSentMsg Then
in
If .Offset(0, 1).Value = SentMsg Then
geändert.
Wenn ich jetzt das Makro starte füllt sich Spalte L aus. Wenn ich es dann nochmal starte kommen die gewünschten Mails.
Gibt es eine Möglichkeit, dass ich das Makro nur einmal starten muss?
LG Sirka

AW: Makro funktioniert nicht - Was muss ich ändern?
27.04.2016 14:23:14
Werner
Hallo Sirka,
da du dein SentMsg erst nach deiner If-Prüfung in die Tabelle schreibst, läuft die If-Prüfung beim ersten Durchlauf ins Leere, zu diesem Zeitpunkt steht noch kein Sent in der Zelle. Ich hab die Blöcke mal verschoben, Versuch mal --ungetestet--:
 Sub Worksheet_Calculate()
Dim FormulaRange As Range
Dim FormulaCell As Range
Dim NotSentMsg As String
Dim MyMsg As String
Dim SentMsg As String
Dim MyLimit As Double
NotSentMsg = "Not Sent"
SentMsg = "Sent"
MyLimit = 0
Set FormulaRange = Range("K2:K8")
On Error GoTo EndMacro:
For Each FormulaCell In FormulaRange.Cells
With FormulaCell
If IsNumeric(.Value) = False Then
MyMsg = "Not numeric"
Application.EnableEvents = False 'Block nach hier verschoben
.Offset(0, 1).Value = MyMsg
Application.EnableEvents = True
Else
If .Value > MyLimit Then
MyMsg = SentMsg
Application.EnableEvents = False 'Block nach hier verschoben
.Offset(0, 1).Value = MyMsg
Application.EnableEvents = True
'If .Offset(0, 1).Value = SentMsg Then 'unnötig, du prüfst oben ja schon auf >  _
MyLimit
Call Mail_with_outlook1(FormulaCell)
'End If
Else
MyMsg = NotSentMsg
Application.EnableEvents = False 'Block nach hier verschoben
.Offset(0, 1).Value = MyMsg
Application.EnableEvents = True
End If
End If
End With
Next FormulaCell
ExitMacro:
Exit Sub
EndMacro:
Application.EnableEvents = True
MsgBox "Some Error occurred." _
& vbLf & Err.Number _
& vbLf & Err.Description
End Sub
Gruß Werner

Anzeige
Makro funktioniert nicht - Was muss ich ändern?
27.04.2016 14:55:18
Sirka
Hallo Werner,
auch dir vielen Dank fürs Helfen!
Ich habe jetzt versucht zu ändern was du geschrieben hast und noch ein paar Else oder End if rausgenommen, die mir dann als Fehler angezeigt wurden.
Jetzt macht das Makro eigentlich genau das was ich will, die Email-Vorlagen für die richtigen Leute öffnen sich. Aber in Spalte L steht überall nur noch "Not Sent" (Wenn das Makro arbeitet sieht man, dass kurzzeitig "Sent" da steht, sich die Mail öffnet und dann "Not Send" erscheint.) Habe ich zuviel gelöscht?
Option Explicit
Sub Worksheet_Calculate()
Dim FormulaRange As Range
Dim FormulaCell As Range
Dim NotSentMsg As String
Dim MyMsg As String
Dim SentMsg As String
Dim MyLimit As Double
NotSentMsg = "Not Sent"
SentMsg = "Sent"
MyLimit = 0
Set FormulaRange = Range("K4:K11")
On Error GoTo EndMacro:
For Each FormulaCell In FormulaRange.Cells
With FormulaCell
If IsNumeric(.Value) = False Then
MyMsg = "Not numeric"
Application.EnableEvents = False
.Offset(0, 1).Value = MyMsg
Application.EnableEvents = True
Else
If .Value > MyLimit Then
MyMsg = SentMsg
Application.EnableEvents = False
.Offset(0, 1).Value = MyMsg
Application.EnableEvents = True
Call Mail_with_outlook1(FormulaCell)
End If
MyMsg = NotSentMsg
Application.EnableEvents = False
.Offset(0, 1).Value = MyMsg
Application.EnableEvents = True
End If
End With
Next FormulaCell
ExitMacro:
Exit Sub
EndMacro:
Application.EnableEvents = True
MsgBox "Some Error occurred." _
& vbLf & Err.Number _
& vbLf & Err.Description
End Sub
Liebe Grüße
Sirka

Anzeige
AW: Makro funktioniert nicht - Was muss ich ändern?
27.04.2016 15:10:36
Werner
Hallo Sirka,
zwei kleine Änderungen, siehe Kommentar. Testen kann ich das derzeit leider nicht.
ub Worksheet_Calculate()
Dim FormulaRange As Range
Dim FormulaCell As Range
Dim NotSentMsg As String
Dim MyMsg As String
Dim SentMsg As String
Dim MyLimit As Double
NotSentMsg = "Not Sent"
SentMsg = "Sent"
MyLimit = 0
Set FormulaRange = Range("K4:K11")
On Error GoTo EndMacro:
For Each FormulaCell In FormulaRange.Cells
With FormulaCell
If IsNumeric(.Value) = False Then
MyMsg = "Not numeric"
Application.EnableEvents = False
.Offset(0, 1).Value = MyMsg
Application.EnableEvents = True
End If '#### geändert von Else auf End If ####
If .Value > MyLimit Then
MyMsg = SentMsg
Application.EnableEvents = False
.Offset(0, 1).Value = MyMsg
Application.EnableEvents = True
Call Mail_with_outlook1(FormulaCell)
Else '#### geändert von End If auf Else ####
MyMsg = NotSentMsg
Application.EnableEvents = False
.Offset(0, 1).Value = MyMsg
Application.EnableEvents = True
End If
End With
Next FormulaCell
ExitMacro:
Exit Sub
EndMacro:
Application.EnableEvents = True
MsgBox "Some Error occurred." _
& vbLf & Err.Number _
& vbLf & Err.Description
End Sub
Gruß Werner

Anzeige
Makro funktioniert nicht - Was muss ich ändern?
27.04.2016 15:14:40
Sirka
Hallo Werner,
Tausend Dank! Es funktioniert! :)

Makro funktioniert nicht - Was muss ich ändern?
27.04.2016 15:15:40
Sirka
Hallo Werner,
Tausend Dank! Es funktioniert! :)

AW: Gerne u. Danke für die Rückmeldung. o.w.T.
27.04.2016 15:25:09
Werner

AW: Gerne u. Danke für die Rückmeldung. o.w.T.
28.04.2016 10:34:17
Sirka
Hallo :)
Eine Frage ist jetzt doch noch aufgetaucht. "Not Sent" und "Sent" wird ja hier automatisch in die nächste Spalte, also Spalte L geschrieben. Kann ich das ändern und mir selber eine Spalte aussuchen, wo ich das stehen haben möchte?
Liebe Grüße
Sirka

AW: Gerne u. Danke für die Rückmeldung. o.w.T.
29.04.2016 21:27:46
Werner
Hallo Sirka,
deine Range liegt ja in der Spalte K
.Offset(0, 1).Value = MyMsg
bedeutet: Ausgehend von Spalte K wird MyMsg in die Zelle mit folgendem Versatz (Offset) geschrieben.
.Offset(0, 1) bedeutet gleiche Zeile (die erste Zahl in der Klammer ist der Zeilen Versatz), eine Spalte nach rechts versetzt (die zweite Zahl in der Klammer ist der Spaltenversatz).
Willst du die Ausgabe in der Spalte M dann .Offset(0, 2) Spalte N .Offset(0, 3)
Der Versatz lässt sich auch nach links von Spalte K angeben, dann halt mit negativen Werten.
Soll die Ausgabe Z.B in Spalte J erfolgen dann .Offset(0, -1)
Gruß Werner

Anzeige
AW: Gerne u. Danke für die Rückmeldung. o.w.T.
02.05.2016 12:11:38
Sirka
Hallo Werner,
Danke für die Erklärung! Das macht natürlich Sinn :)
LG Sirka

AW: Gerne u. Danke für die Rückmeldung. o.w.T.
02.05.2016 16:13:27
Werner

312 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige