[Gelöst] Excel 2013 Macro ausführen lassen wenn ein Wert erreicht wird?

matrixpro

..::=Area51=::.., ,
Moin.. ich versuche mal so kurz und eindeutig zu beschreiben was ich vor haben..

Also es geht um einen Bestand an Kartons. Diese müssen bestellt werden sobald der Bastand eine gewissen anzahl hat.

Ich habe es also bis jetzt hin bekommen, das ich ein einer Tabelle diese Mengen habe..

Beispiel mal...

In der Liste steht die größe maße, menge geammt ( neu ), anzahl der paletten, ist mange und entnommen...

So ich habe also 100 Stk. wenn dieser Wert nun auf 30 fällt kommt in einen Feld die Meldung bestellen..

Soweit ist auch alles OK..

Beim Macro nun, habe ich es.. das wenn ich es ausführe Automatsich Outlook öffnet und eine definierte Datei anhängt, und das ganze an eine definierte Mail+kurzen text etc. sendet...

( hoffe man versteht was ich meine... )

Ich möchte das nun so haben, wenn es denn geht. Das wenn Feld A1 anzeigt Bestellung dann soll das Macro los gehen...

Das ganze möchte ich gern so haben damit man es auf keinen fall vergessen kann. Da es immer mal wieder vor kommt das ein Kollege es dann doch nicht macht usw usw.. und schon sind 2 wochen rum und man muss dann wieder 1 Woche warten bis die neue Ware dann da ist.. ( das ist der hintergrund^^ )

Müsste doch eigentlich möglich sein oder?
 

Timelord

assimiliert
Excel 2013 habe ich hier nicht zur Verfügung, aber da dürfte sich wenig an der Vorgehensweise geändert haben.

Ad hoc würde ich sagen:
Nutze eine VBA-function für Feld A1, dann kannst du nicht nur den Bestellungstext ausgeben, sondern auch gleich die Mailroutine starten.
 

matrixpro

..::=Area51=::.., ,
OK, jetzt müsste ich dann nur noch wissen wie das geht, denn ich habe mir den anderen kram auch aus dem netz zusammen gesucht und nur angepasst.,

Hättest du da nen Tipp? Wäre nett.
 

Timelord

assimiliert
Ohne nähere Details wird das schwierig.
Je nachdem ob du ein Händchen für Programmierung hast, sollte es aber nicht allzu schwer für dich werden.

Im VB-Editor kannst du dir eine eigene Funktion mit VBA erstellen.
Diese Funktion kannst du dann in der Exceldatei wie eine normale Formel verwenden.

Allgemein:
Code:
Private Function Funktionsname(Übergabeparameter)
    [diverse Befehle]
    Funktionsname = Rückgabewert
End Function

Beispiel:
Code:
Private Function TestMich(Wert1)
    TestMich = Wert1 + Range("A2")
End Function

Die Formel wird in einer Zelle aufgerufen, z. B. mit "=TestMich(2)".
Das Makro addiert zu der 2 dann noch die Zahl in Zelle A2 hinzu und gibt das Ergebnis in der Zelle aus, in der der Aufruf steht.

Statt der Berechnung müsstest du die Formel nachbauen, die dir das "Bestellen" ausgibt.
Dazu noch eine kleine if-Abfrage (Suchbegriffe für Google: VBA if), in der bei "Bestellen" dann automatisch das Mailskript aufgerufen wird.

Edit:
ot:
Nanü, wie bekomme ich denn die Einrückung hin? Hier klaut mir wer meine Leerzeichen. :cry:
 
Zuletzt bearbeitet:

Norbert

Moderator
Teammitglied
ot:
Nanü, wie bekomme ich denn die Einrückung hin? Hier klaut mir wer meine Leerzeichen. :cry:
Nicht als Zitat, sondern als CODE-Box einfügen. Auch Tabulatoren bleiben so erhalten. ;)

Code:
[B]Beispiel:[/B]

Private Function TestMich(Wert1)
	TestMich = Wert1 + Range("A2")
End Function
 

matrixpro

..::=Area51=::.., ,
Danke erst mal für den Tipp werde da mal ein wenig versuchen.. wenn ich denn zeit finde :) Werde dann noch mal berichten ob es hin gehauen hat.
 

matrixpro

..::=Area51=::.., ,
HI...

Also ich habe ein wenig versucht aber es nicht hinbekommen... habe auch kein plan wo ich den neuen VBE code schreiben soll...

also das mit der mail ist nun so
Code:
Sub mail()


Dim ol, mail As Object
Set ol = CreateObject("Outlook.Application")
Set mail = ol.CreateItem(0)
mail.Subject = "Bestllung" & Now
mail.To = "XXXXXX@xxx.de"
mail.cc = ""
mail.bcc = ""
'mit body wird nur noch im txt-Format versandt!
mail.body = "Automatsiche Karton Bestellung" & Chr(13) & _
"Dieses Mail wurde direkt aus Excel versandt" & Chr(13) & _
"und dabei der nachfolgende Dateianhang angehängt." & Chr(13) & Chr(13)
mail.Attachments.Add "C:\Users\xxxxxx\Documents\bestellung01.docx"
'Mail anzeigen
mail.Display
' mit dem folgenden Befehl kann direkt gesendet werden:
'mail.send

End Sub

das geht wie gesagt ja auch, nun bekomme ich es aber einfach nicht hin, das das makro startet wenn in G2 durch die bedingte formatierun das wort betsellen auftaucht.

Eventuell liegt es ja aber auch da dran, das das Wort ja so oder so schon drin steht, es ist halt erst nur Weiß auf weißen hintergund. und wird durch die Bedingte Formatierung dann ja nur farblich gemacht..

Eventuell gibt es ja aber auch eine andere Lösung es ist eigentlich recht simpel.. es soll ja am ende nur die entnomende menge von der Max verhanden abgezogen werden, und das ergebiss löst dann den wert "Bestellen" aus.. so das dann auch gleichzeitig die mail los gehen soll..

Hab momentan auch stress auf der abreit weil viel zu tun... das hier mache ich zwar für mich auf der arbeit damit es etwas leichter wird, aber eben in meiner feizeit... eventuell hat ja noch einer ne idee wie man das noch lösen kann.
 

Timelord

assimiliert
Eventuell liegt es ja aber auch da dran, das das Wort ja so oder so schon drin steht, es ist halt erst nur Weiß auf weißen hintergund. und wird durch die Bedingte Formatierung dann ja nur farblich gemacht..

Da liegt der Knackpunkt. Farben sind für Excel kein Trigger. Sie lösen nichts aus.
Wie sind denn die Bedingungen für das Umfärben?
 

matrixpro

..::=Area51=::.., ,
Hallo.. also

Tabelle ist so aufgebaut...

A2 = Größe
B2 = Anzahl auf einer Palette
C2 = Anzahl der Paletten
D2 = Maße
E2 = Gesammt Bestellt
F2 = Ist Menge
G2 = Hier ist das feld wo durch die Bedingte Formatierung das Wort Bestellen Farblich gemacht wird
h2 = Entnommen

Code:
Die Formeln bis jetzt

bei E2  =C2*B2
bei F2 =E2-H2

Das heist immer wenn ich etwas entnehme schreibe ich in H2 z.b. 10+10+20  oder eben die menge dich ich genommen habe. Fällt dann die Ist Menge auf einen wert. Kommt durch die bestimmt formatierung das Wort zum vorschein.

Wie gesgt es kann auch eine andere Lösung geben. Wichtig ist nur das die Tabelle also die Beschriftungen so bleiben.
 

Timelord

assimiliert
Im VB-Editor, in dem du auch das Mailskript hinterlegt hast, schreibst du folgendes vor das Mailskript:

Code:
Function CheckMenge(RestMenge, MinMenge)

    If RestMenge <= MinMenge Then
        mail
        CheckMenge = "Bestellen"
    Else
        CheckMenge = ""
    End If

End Function

Dann änderst du G2 noch auf folgendes ab:
=CheckMenge(F2;3)

Damit wird geprüft, ob der Grenzwert (die "3" in G2 - solltest du auf einen sinnvollen Wert einstellen ;)) in Zelle F2 erreicht wird.
Wenn ja gibt die Funktion "Bestellen" zurück und ruft das Mailskript auf.
 

matrixpro

..::=Area51=::.., ,
HI super tipp. Nur kommt nun in G2 #NAME?... Irgendwas mache ich entweder flasch oder übersehe ich. Bin grad aber auch nicht mehr wirklich in der lage was zu rallen^^ Aber super sache.. ist ja schon mal auf den richtigen wert...

Gibt es links oder tipps das man sich sowas beibringen kann?
 

Timelord

assimiliert
#NAME bedeutet, dass die Formel/Function nicht gefunden wird.
Entweder ein Tippfehler oder die Makros sind deaktiviert.

Zum Lernen ist der Makrorekorder ganz nützlich - starten, ein paar Standard Excel Aktionen durchführen, stoppen - danach kannst du dir im VB-Editor das Ergebnis ansehen.

Ansonsten suche ich meistens via Google nach VBA und einem entsprechenden Stichwort (für allgemeine Informationen vielleicht "VBA Einstieg"). Oft sind die Skripte von Hochschulen ganz nützlich.
 

matrixpro

..::=Area51=::.., ,
Moin, also Tippfehler schließe ich aus, weil habe nun alles 4 mal nachgeschaut alles OK.Function nicht gefunden wird? Was soll mir das sagen? Die Makros sind alle aktiviert. Also es kommt keine Meldung beim laden der "Mappe" das die Makros deaktiviert sind.

Code:
Function CheckMenge(RestMenge, MinMenge)

    If RestMenge <= MinMenge Then
        mail
        CheckMenge = "Bestellen"
    Else
        CheckMenge = ""
    End If

End Function
-----------------------------------------------------
Sub mail()

Dim ol, mail As Object
Set ol = CreateObject("Outlook.Application")
Set mail = ol.CreateItem(0)
mail.Subject = "Bestllung Leer Kartons" & Now
mail.To = "xxx@xxxde"
mail.cc = ""
mail.bcc = ""
'mit body wird nur noch im txt-Format versandt!
mail.body = "xxx" & Chr(13) & _
"Dieses Mail wurde direkt aus Excel versandt" & Chr(13) & _
"und dabei der nachfolgende Dateianhang angehängt." & Chr(13) & Chr(13)
mail.Attachments.Add "C:\Users\xxx\Documents\bestellung01.docx"
'Mail anzeigen
mail.Display
' mit dem folgenden Befehl kann direkt gesendet werden:
'mail.send

End Sub

Meine ------------------- Linie soll andeuten das im VBE auch eine Durchgezogene Linie ist an der Stelle

und jetzt noch mal für mich
Code:
Function CheckMenge(RestMenge, MinMenge)

    If RestMenge <= MinMenge Then
        mail
        CheckMenge = "Bestellen"
    Else
        CheckMenge = ""
    End If

End Function
Function CheckMenge(RestMenge, MinMenge)

Also der Name der Function ist CheckMenge und die Function an sich ist das er die Restmenge mit der MinMenge vergleichen soll.
If Restmenge <= MinMenge Then mail
Ist die Restmenge kleiner als die MinMenge dann mail ( also die mail starten )

Restmenge ist in diesen fall F2;30 und die 30 ist die Minmenge ..

Habe ich das funktion so richtig verstanden?

Ich habe das nun mit Dedingter Formation in der Zelle gemacht und ohne und auch eine ganz neue Tabelle zum Test. Und immer kommt diese #Name? " Meldung"
 

Timelord

assimiliert
Habe ich das funktion so richtig verstanden?

Ja, genau so.
Eigentlich ganz einfach. :)



Ich habe das nun mit Dedingter Formation in der Zelle gemacht und ohne und auch eine ganz neue Tabelle zum Test. Und immer kommt diese #Name? " Meldung"

Hmmm, da bin ich jetzt überfragt. Mit Excel 2013 habe ich noch keine Berührungspunkte.
Ich habe es mit Excel 2003 und Excel 2010 getestet - hier läuft es sauber durch.

Den Fehler kann ich nachstellen, wenn ich die Makros komplett deaktiviere.

Bei Excel 2010 gibt es noch die Option "Alle Makros ohne Benachrichtigung deaktivieren", dann gibt es noch nicht mal eine Meldung.
Schau mal, was bei dir unter
Datei - Optionen - Sicherheitscenter - Einstellungen für das Sicherheitscenter - Einstellungen für Makros
eingetragen ist - dort sollte üblicherweise "Alle Makros mit Benachrichtigung deaktivieren" eingestellt sein (beim Öffnen der Datei kommt dann eine Meldung und man kann die Makros kurzzeitig aktivieren - alle grosszügigeren Einstellungen sind mit äusserster Vorsicht zu geniessen).
 

matrixpro

..::=Area51=::.., ,
Moin... also

habe es nun hinbekommen. Muss es in einen Modul schreiben. Soweit ist alles Tutti. Nur möchte ich ja nun auch für die anderen Zeilen das gleiche haben. Nur das eben als Beispiel mal.

Zeile 1..... Ware Größe 1 die mail enthält den text für die Ware die da bestellt werden soll im Anhang
Zeile 2..... Ware Größe 2 da muss natürlich dann ein anderer anhang dran an die Mail..

Nun habe ich schon versucht in Modul2 den gleichen code zu nutzen nur das er dann nicht mehr

Code:
Function CheckMenge1(RestMenge1, MinMenge1)

    If RestMenge1 <= MinMenge1 Then
        mail
        CheckMenge1 = "Bestellen"
    Else
        CheckMenge1 = ""
    End If

End Function

aber das will er auch nicht machen dabei schmiert dann alles ab als es geht dann auch der erste nicht was vorher ging^^

ich bin nebenbei noch an googlen wie man das machen muss/kann.. denke mal das es wohl möglich ist.. nur wie is die frage^^

_________________________
Edit
Habe es hinbekommen, scheinbar mag das VBE es nicht, wenn man was in die Modue Kopiert und es danach unbennt. Nun habe ich es vorher in programers notpade geändert und siehe da alles Tutti.

Super sache das.. 1000 Dank für den tipp und die Hilfe.
 
Zuletzt bearbeitet:

matrixpro

..::=Area51=::.., ,
Macht ja nichts^^ Um so besser für mich, wenn man etwas selber Herrausbekommen hat. Dann kann man sich das auch gleich besser merken^^
 
Oben