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

Mit WENN-Funktion Makro starten

Mit WENN-Funktion Makro starten
04.07.2016 15:48:37
Wolfango
Hallo Experten,
ich möchte über WENN-Funktionen Makros starten (...bin absoluter VBA-Laie).
Im Beispiel...
https://www.herber.de/bbs/user/106739.xlsm
...geht es dabei um das Ausblenden einer Spalte (H). Dies ist aber nur ein Beispiel, tatsächlich möchte ich verschiedenste (teilweise mit dem Rekorder aufgezeichnete) Makros starten.
Zum o.g. Beispiel:
Wenn ich das Makro über den VBA-Editor starte, tut es was es soll: Spalte H wird ausgeblendet und anschließend erscheint eine Message-Box.
Wenn ich das Makro über die WENN-Funktion in Zelle A2 starte (durch Eingabe der Zahl 1 in Zelle A1), findet kein Ausblenden der Spalte H statt, die Message-Box erscheint aber (...was mir signalisiert, dass das Makro doch grundsätzlich gestartet wird!?)
Woran liegt es nun, dass nur ein Teil des Makros ausgeführt wird?
Grüße,
Wo

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mit WENN-Funktion Makro starten
04.07.2016 19:06:31
Dieter(Drummer)
Hallo Wolfango,
wenn du mal im Netzt recherchierst, wirst du festellen, dass es nicht möglich ist, per Funktion eine Makro zu starten/auszuführen. Es kann wohl nur ein Makro mit Hinweis MSGBOX aktiviert werden.
Solltes es tatsächlich doch eine Möglichkeit geben, wäre ich auch an einem Hinweis interessiert.
Gruß, Dieter(Drummer)

AW: Mit WENN-Funktion Makro starten
04.07.2016 19:29:54
Nepumuk
Hallo,
teste mal:
Option Explicit

Private Declare PtrSafe Function SetTimer Lib "user32.dll" ( _
    ByVal hWnd As LongPtr, _
    ByVal nIDEvent As LongPtr, _
    ByVal uElapse As Long, _
    ByVal lpTimerFunc As LongPtr) As LongPtr
Private Declare PtrSafe Function KillTimer Lib "user32.dll" ( _
    ByVal hWnd As LongPtr, _
    ByVal nIDEvent As LongPtr) As Long

Public Function Startmakro() As String
    Call SetTimer(Application.hWnd, 0, 10, AddressOf Testmakro)
    Startmakro = "Makro gestartet."
End Function

Private Sub Testmakro(ByVal hWnd As LongPtr, ByVal nIDEvent As LongPtr, _
        ByVal uElapse As Long, ByVal lpTimerFunc As LongPtr)

    Call KillTimer(Application.hWnd, 0)
    ActiveSheet.Columns("H:H").Hidden = True
    MsgBox "Das Testmakro wurde gestartet"
End Sub

Gruß
Nepumuk

Anzeige
AW: Mit WENN-Funktion Makro starten
04.07.2016 19:56:59
Dieter(Drummer)
Guten Abend Nepumuk,
auch wenn ich nicht der Fragesteller bin, dein Makro ist perfekt und funktioniert.
Ich werde mir dies aufheben :-).
Gruß, Dieter(Drummer)

AW: Ich finde es immer wieder ...
05.07.2016 11:09:28
Dieter(Drummer)
... bedauerlich, dass von Fragestellern oft keine Rückmeldung erfolgt! In diesem Forum werden immer exquisite Hilfen und auch Lösungen angeboten, oft auch fertige Lösungen. Soviel Anstand sollte man eigentlich erwarten können. Schade ... jeder Helfer oder Helferin kann wenigstens ein Feedback erwarten, ob die Hilfe ok oder noch nicht ok war/ist.
In diesem Sinne einen schönen Tag und
Gruß, Dieter(Drummer)

Anzeige
AW: Ich finde es immer wieder ...
05.07.2016 13:28:56
Werner
Hallo Dieter,
da kann (muss) ich dir beipflichten. Problem wird nur sein, dass derjenige, den es betrifft, hier wohl gar nicht mehr rein schauen wird. Problem gelöst - aus dem Auge aus dem Sinn. Somit wird er wohl deine berechtigte Kritik wahrscheinlich gar nicht mitbekommen.
Ich kann nur hoffen, dass sich die Helfer trotzdem nicht entmutigen lassen.
Gruß und ein allgemeines Dankeschön an alle Helfer
Werner

AW: Ich finde es immer wieder ...
05.07.2016 14:08:00
Wolfango
...wie schon an Dieter geschrieben:
Bitte ein wenig Geduld! Ich habe es erst heute lesen und auch testen können!
Dies hier ist mit Abstand das hochwertigste Excel-Forum welches ich kenne und mir ist sehr wohl klar, dass dies auf "Miteinander" und nicht auf "schnall mal Info abgreifen" basiert!
Danke und Gruß,
Wolfango

Anzeige
AW: Danke für deine Rückmeldung. owT.
05.07.2016 14:18:33
Dieter(Drummer)

AW: Ich finde es immer wieder ...
05.07.2016 14:04:41
Wolfango
...da bin ich absolut Deiner Meinung!!! Ich schätze dieses Forum außerordentlich und mir wurde hier schon sehr sehr oft geholfen!! Und jedes einzelne Mal habe ich Rückmeldung gegeben!
Aber bitte.....ein wenig Geduld!
Ich habe es erst heute lesen und auch ausprobieren können...
Nochmal Danke und Gruß,
Wolfango

AW: Mit WENN-Funktion Makro starten
05.07.2016 14:00:54
Wolfango
Vielen Dank! Der Code funktioniert einwandfrei!
Heißt das, es geht grundsätzlich, aber eben nicht mit jedem Code, auch wenn sich dieser über den VBA-Editor einwandfrei starten lässt?
Danke und Gruß,
Wo

AW: Mit WENN-Funktion Makro starten
05.07.2016 13:58:22
Wolfango
Hallo Dieter,
recherchiert hatte ich...Ergebnis: Eine WENN-Funktion kann kein Makro aufrufen aber eine Funktion ausführen. Und die Funktion startet dann wiederum das Makro. Und genau das hatte ich gemacht (s. Beispiel). Hierzu gibt es ja eine Reihe von Anleitungen im Netz, die sich für mich aber so lesen, dass man das dann mit jedem beliebigen Makro genauso machen kann. Und es scheint ja auch grundsätzlich irgendwie zu gehen (siehe Makro von Nepumuk).
Welches Fazit ist denn jetzt für mich als VBA-Laien korrekt?
Ja, es geht grundsätzlich möglich, aber eben nicht so einfach und nicht mit jedem Code, auch wenn sich dieser über den VBA-Editor einwandfrei starten lässt. Kann man das so sagen?
Danke und Gruß,
Wo

Anzeige
AW: Ich kann mir vorstellen, ...
05.07.2016 14:31:21
Dieter(Drummer)
... dass es auch mit einem anderen Code (Makro) geht. Es müsste dann wohl die Formel Wenn-Abfrage auch den Hinweis auf das andere Makro haben. Die wäre einfach mal mit dem Code von Nepumuk zu testen. Da müsst dann aber auch einiges angepasst werden und da kann dir dann wohl nur wieder Nepumuk, oder ein anderer, helfen.
Gruß und noch einen schönen Tag,
Dieter(Drummer)

AW: Ich kann mir vorstellen, ...
05.07.2016 17:19:14
Wolfango
...Danke...werde ich weiter probieren!
Gruß, Wo

AW: Mit WENN-Funktion Makro starten
05.07.2016 14:52:51
Dieter(Drummer)
Hallo Wolfango,
siehe dir das mal an, geänderter Teil (Fett)im Makro von Nepumuk:
Public Function Startmakro() As String
'Call SetTimer(Application.hWnd, 0, 10, AddressOf Testmakro)
'Neu
Call SetTimer(Application.hWnd, 0, 10, AddressOf Testmakro2)
Startmakro = "Makro gestartet."
End Function
und:
Private Sub Testmakro2(ByVal hWnd As LongPtr, ByVal nIDEvent As LongPtr, _
ByVal uElapse As Long, ByVal lpTimerFunc As LongPtr)
Call KillTimer(Application.hWnd, 0)
'ActiveSheet.Columns("H:H").Hidden = True
'Neu
Columns("G:I").Select
Selection.EntireColumn.Hidden = False
Range("B1").Select
MsgBox "Das Testmakro2 wurde gestartet"
End Sub

Bei mir funktioniert es. Es geht bestimmt auch besser, aber da kann ich nicht weiter helfen.
Gruß, Dieter(Drummer)

Anzeige
AW: Mit WENN-Funktion Makro starten
05.07.2016 17:28:11
Wolfango
...bei mir funktioniert es ebenfalls!
Und es bestätigt nun meine (VBA-Laien-)Vermutung: Ich kann nicht jeden beliebigen VBA-Code (z.B. aufgezeichnet mit dem Rekorder) über eine WENN-Fktn starten!
Vielen Dank!
Gruß, Wo

Auch, WENN du meine AW zu ignorieren beliebst, ...
05.07.2016 15:07:35
Luc:-?
…Wolfango,
1. einer Funktion in einer Xl-Fml ist es grundsätzlich nicht erlaubt, irgendwelche Makros zu starten, die Veränderungen an einer Arbeitsmappe vornehmen. Das verhindert hier die Xl-Steuerung, denn einer Fkts- wäre es ansonsten genauso möglich wie einer SubProzedur (Start einer MsgBox ist keine Veränderung, aber äußerst unklug, weil hiermit die Berechnungs­Automatik gestört wird).
2. Alles Derartige, was trotzdem aus einer ZellFml heraus fktioniert, basiert entweder auf einer Xl-ÜberwachungsLücke*, der physischen Entkopplung° von aufrufender Fkt (in einer ZellFml) und ausfüh­render Subroutine oder WinAPI-Fktt (quasi Xl-Über­steuerung von außen).
* Hierunter dürfte auch der von mir vorgestellte Direkt­Aufruf der Subroutine per Auswertung eines FmlTextes fallen, der sich zwar die Xl-Steuerung zunutze macht, die dann aber in diesem „Xl-Parallel­Universum“ nicht mehr feststellen kann, dass es sich um eigentlich Unerlaubtes handelt.
° Eine direkt aus einer Fkt heraus aufgerufene SubProzedur fungiert als ein UP derselben, wird also quasi zu ihrem Bestandteil und unterliegt somit den gleichen Einschränkungen wie die Fkt.

Man sollte so etwas (schon gar nicht als Anfänger!) aber nicht inflationär, sondern nur in Ausnahme­Fällen einsetzen!
Luc :-?

Anzeige
AW: Auch, WENN du meine AW zu ignorieren beliebst, ...
05.07.2016 17:23:01
Wolfango
...Ok...das habe ich so (einigermaßen) verstanden...
Einfach Makros via Rekorder aufzuzeichnen und dann über eine WENN-Formel zu starten scheint demnach nur äußerst bedingt möglich.
Vielen Dank und Gruß,
Wolfango

Wie so etwas fktionieren kann, wird auch ...
05.07.2016 00:01:33
Luc:-?
hier ff (am Bsp selbstkorrigierende EingabeZelle) gezeigt, ganz ohne die API-Fktt zu bemühen, W'o!
Feedback nicht unerwünscht! Gruß, Luc :-?
Besser informiert mit …

Anzeige
AW: Wie so etwas fktionieren kann, wird auch ...
05.07.2016 17:24:01
Wolfango
...damit muss ich mich noch ausführlicher beschäftigen....Danke schon mal!
Gruß, Wo

327 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige