Clever-Excel-Forum

Normale Version: Makro wird 2x ausgeführt
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hi,

ich steuere über eine Wenn-Funktion ein Makro an (die Funktion), was mir eine Outlook-email mit Daten aus unterschiedlichen Zellen aus meiner Tabelle in das Mailfenster kopiert. Leider wird das Makro 2x ausgeführt, sodass ich zwei Mailfenster erhalte. Aktiviere ich das Makro manuell im vba-Editor, wird korrekterweise nur ein Mailfenster geöffnet. Ich weiß nicht woran das liegt, mache da schon Stunden dran rum ...  :20:

(Die <`br> sind Absätze, hab sie mit ` gekennzeichnet, damit sie hier dargestellt werden)

Gruß,
Andreas


code:


Function Tankmakro()
Application.Volatile
Tankmakro_start
End Function


Sub Tankmakro_start()
On Error Resume Next
Dim olApp As Object
Set olApp = CreateObject("Outlook.Application")
With olApp.CreateItem(0)
strhtml = "Fahrzeug: " & ActiveCell.Offset(0, -3).Value & " <`br>"
strhtml = strhtml & "Kraftstoff : " & ActiveCell.Offset(0, -2).Value & " <`br>"
strhtml = strhtml & "Kontierung: XYZ<`br><`br>"
strhtml = strhtml & "Danke.<`br>"
.To = "Mailadresse"
.cc = "Mailadresse"
.Subject = "Tankauftrag " & ActiveCell.Offset(0, -3).Value
.htmlbody = "Bitte folgendes Fahrzeug zu 50% tanken: <`br><`br>" & strhtml
.Display
End With
Set olApp = Nothing
End Sub
Hallo Andeeas,

wie und wann bzw. wo wird denn die Funktion Tankmakro verwendet bzw. aufgerufen? Offensichtlich scheint sie aus deiner Tabelle doppelt verwendet zu werden!
Hallo Glausius,

das Makro wird über folgendes aufgerufen:

=WENN(UND(G2630="ja";C2630="Text");Tankmakro();"")



Besten Dank vorab
Hallo Andreas,

damit wird das  Makro bei jedem Eintrag in der Tabelle gestartet, denn da prüft Excel alle Formeln ab.
Ich habe jetzt die Wenn-Funktion insofern geändert, dass sie eine 1 in eine andere Zelle schreibt. Das Makro prüft nun auf 1, wenn ja, dann Makro ausführen. Komischer Weise gehen immernoch 2 Outlook-Fenster auf, also 2x die Mail. Ich verstehs nicht.   :22: :22:
Moin!
Dann sei mal froh, dass es nur zwei sind, beim Wachsen der Datei dürftest Du den Nickname Spammer in der Firma erhalten.  :21:
Verrätst Du mir, warum Du das mittels UDF (die auch noch bewusst(!) volatil gemacht wurde) regeln willst?

Gruß Ralf
Moin Ralf,

das Volatile habe ich heute Morgen entfernt (war ein Performance-Test).

Die Tabelle ist recht simpel aufgebaut (Historie). Es gibt z.B. mehrere Einträge die diesbezüglich eine 1 zurück geben und dennoch geht das Mailfenster immer nur 2 x auf. 

Also z.B.: 

| Datum | Kunde | Fahrzeug | Kraftstoff | Tanken |  ....    | 
| 25.01.2017 |  XY | YZ |ROZ98 | ja | ..... | --------------------------> Wenn-Formel gibt 1 zurück
.
| Datum | Kunde | Fahrzeug | Kraftstoff | Tanken |  ....    | 
| 12.05.2017 |  XY | YZ |ROZ98 | ja | ..... | --------------------------> Wenn-Formel gibt 1 zurück
.
.
| Datum | Kunde | Fahrzeug | Kraftstoff | Tanken |  ....    | 
| 17.01.2018 |  XY | YZ |ROZ98 | ja | ..... | --------------------------> Wenn-Formel gibt 1 zurück
.
.
.
| Datum | Kunde | Fahrzeug | Kraftstoff | Tanken |  ....    | 
| 17.01.2018 |  XY | YZ |ROZ98 | nein | ..... | --------------------------> Wenn-Formel gibt 0 zurück


Das Makro öffnet das Mailfenster dennoch 2x selbst wenn nur 1x irgendwo ja (also 1) steht.

Undecided

Achja, das Makro wird aktiv ausgelöst, d.h. wenn der Benutzer in der aktuellen Zeile bei Tanken -ja per Dropdown auswählt.
(01.02.2018, 08:05)Taikido schrieb: [ -> ]das Makro wird aktiv ausgelöst, d.h. wenn der Benutzer in der aktuellen Zeile bei Tanken -ja per Dropdown auswählt.

Dann würde ich ein Worksheet_Change nehmen und das Target in Spalte E auf ja überwachen.

Gruß Ralf
(01.02.2018, 08:07)RPP63 schrieb: [ -> ]Dann würde ich ein Worksheet_Change nehmen und das Target in Spalte E auf ja überwachen.

Gruß Ralf

Wie würde das dann aussehen? Ich habe damit noch keine Erfahrung    Huh
Ungetestet; ins Modul der Tabelle (.Column = 5 ist Spalte "E"):
Die UDF brauchst Du jetzt nicht mehr.

Private Sub Worksheet_Change(ByVal Target As Range)
With Target
  If .Column = 5 And .CountLarge = 1 Then
    If .Value = "ja" Then Call Tankmakro_start
  End If
End With
End Sub

Gruß Ralf
Seiten: 1 2