Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1432to1436
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 nach Zelländerung oder Buttonklick ausführen

Makro nach Zelländerung oder Buttonklick ausführen
08.07.2015 14:25:50
Sander
Liebe Excel-Spezialisten,
ich benötige Hilfe beim automatischen Ausführen eines Makros. Zu meinem speziellen Fall konnte ich leider in keinem Forumbeitrag eine passende Hilfe finden.
Ich habe eine eigene Suchfunktion geschrieben, die in bestimmten Feldern meiner Tabelle sucht (es geht um eine Liste mit Namen, Adressen etc.). Den Suchbegriff muss der Nutzer in einer Zelle eingeben (B2). Diese Suche selbst funktioniert einwandfrei.
Ich verwende Worksheet_Change, um nach dem Ändern des Zellwertes automatisch das Suchmakro zu starten. Dies klappt.
Ich habe außerdem einen Suchbutton eingefügt, mit dem man ebenfalls nach dem Suchbegriff suchen kann. Dies ist nötig, weil bei einem nicht geänderten Suchbegriff die Suche ja auch irgendwie startbar sein soll. Dies klappt auch.
Nun kommt das Problem: Wenn der Nutzer gerade im Suchfeld einen Suchbegriff eingegeben hat und nun (statt der Entertaste) direkt auf den Suchbutton klickt, wird das Makro zweimal nacheinander ausgelöst. Wie kann ich dies verhindern? Ich möchte also, dass das Makro in jedem Fall nur einmal gestartet wird.
Ich habe eine Beispieldatei hochgeladen, die nur das Wesentliche enthält (ohne die Daten, ohne die eigentliche Suchfunktion, sondern nur mit einer Messagebox).
https://www.herber.de/bbs/user/98710.xlsm
Wenn mir jemand helfen kann, wäre das toll.
Herzliche Grüße,
Sander

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro nach Zelländerung oder Buttonklick ausführen
08.07.2015 14:36:52
Kenny
Hallo Sander,
gerade die zwei Befehle einfügen, dann müsste es gehen.
Viel Spaß!

Sub StartSearch()
Application.EnableEvents = False
If Range("SuchString").Cells(1, 1) = "Name eingeben" Or Trim(Range("SuchString").Cells(1, 1)) = _
"" Then
Range("SuchString").Cells(1, 1).Select
MsgBox "Geben Sie einen Namen oder einen Teil eines Namens ein und klicken Sie anschließend  _
erneut auf ""Suchen"".", vbInformation
Range("SuchString").Cells(1, 1).Activate
Else
Range("SuchString").Cells(1, 1).Select
MsgBox "Jetzt startet die Suche."
End If
Application.EnableEvents = True
End Sub

Anzeige
AW: Makro nach Zelländerung oder Buttonklick ausführen
08.07.2015 15:35:27
Sander
Hallo Kenny,
danke für deine Antwort. Leider löst sie das Problem nicht.
Wenn ich einen Suchbegriff eingebe und dann direkt auf den Suchbutton klicke, wird weiterhin zweimal das Makro ausgeführt. Der Aufruf des Makros geschieht ja nicht innerhalb der Suchfunktion, weshalb das Application.EnableEvents = False nichts bringt. Das Makro wird einerseits durch Worksheet_Change aufgerufen, andererseits durch den Mausklick.
Hast du noch weitere Ideen?
Herzliche Grüße,
Sander

AW: Makro nach Zelländerung oder Buttonklick ausführen
08.07.2015 15:42:42
Sander
Hallo Kenny,
danke für deine Antwort. Leider löst sie das Problem nicht.
Wenn ich einen Suchbegriff eingebe und dann direkt auf den Suchbutton klicke, wird weiterhin zweimal das Makro ausgeführt. Der Aufruf des Makros geschieht ja nicht innerhalb der Suchfunktion, weshalb das Application.EnableEvents = False nichts bringt. Das Makro wird einerseits durch Worksheet_Change aufgerufen, andererseits durch den Mausklick.
Hast du noch weitere Ideen?
Herzliche Grüße,
Sander

Anzeige
AW: Makro nach Zelländerung oder Buttonklick ausführen
08.07.2015 15:59:57
Kenny
Ok sorry. Dachte bei mir hätte es geklappt gehabt.
Habe jetzt einen neuen Lösungsansatz. Hoffe der klappt!

Option Explicit
Public prüfung As Boolean
Sub StartSearch()
If Range("SuchString").Cells(1, 1) = "Name eingeben" Or Trim(Range("SuchString").Cells(1, 1)) = _
_
"" Then
Range("SuchString").Cells(1, 1).Select
MsgBox "Geben Sie einen Namen oder einen Teil eines Namens ein und klicken Sie anschließend  _
_erneut auf ""Suchen"".", vbInformation
Range("SuchString").Cells(1, 1).Activate
Else
Range("SuchString").Cells(1, 1).Select
MsgBox "Jetzt startet die Suche."
prüfung = True
End If
End Sub


Private Sub Worksheet_Change(ByVal Target As Range)
If prüfung = True Then
prüfung = False
Exit Sub
End If
If Not (Intersect(Range("SuchString"), Target) Is Nothing) Then
If Trim(Range("SuchString").Cells(1, 1)) = "" Then
Range("SuchString").Cells(1, 1) = "Name eingeben"
ElseIf Not Range("SuchString").Cells(1, 1) = "Name eingeben" Then
Call StartSearch
End If
End If
End Sub

Anzeige
AW: Makro nach Zelländerung oder Buttonklick ausführen
08.07.2015 17:15:22
Sander
Hallo Kenny,
auch diese Variante funktioniert nicht :(
Zwar wird die Suchfunktion nun nicht mehr doppelt ausgeführt, aber das liegt einzig daran, dass dein Code bewirkt, dass die Suchfunktion ohnehin nur jedes zweite Mal ausgeführt wird (durch deine "Prüfung"-Boolean-Variable).
Wenn ich also zweimal ganz normal per Enter die Suche starte, wird in deiner Version nur jede zweite Anfrage bearbeitet. So ist es ja auch nicht sinnvoll.
Weitere Ideen? Kann die Suchfunktion irgendwie herausfinden, durch wen sie aufgerufen wurde?
Herzliche Grüße,
Sander

AW: Makro nach Zelländerung oder Buttonklick ausführen
08.07.2015 20:58:10
Rolf.dW
Hallo Sander,
lässt sich das Problem evtl. mit einer (zusätzlichen) OnKey-Abfrage (Application.OnKey...) lösen?
Gruß, Rolf

Anzeige
AW: Makro nach Zelländerung oder Buttonklick ausführen
08.07.2015 22:14:53
Sander
Hallo Rolf,
yippie, damit funktioniert es. Jetzt kann ich mir sogar den Suchbutton sparen und direkt beim Drücken der Enter-Taste mit der Suche loslegen (falls die aktive Zelle das Suchfeld ist), egal ob der Suchtext geändert wurde oder nicht. Der Vollständigkeit halber hier der Code:
Arbeitsmappe:

Option Explicit
Sub Workbook_Open()
Application.OnKey "~", "StartSearch"
End Sub
Modul1:

Option Explicit
Public Sub StartSearch()
If Not Intersect(Selection, Range("A2")) Is Nothing Then
MsgBox "Starte Suche"
Else
ActiveCell.Offset(1, 0).Select
'sonst normales Enter-Verhalten: Cursor rückt ein Feld nach unten
End If
End Sub
Vielen Dank!!!
Herzliche Grüße,
Sander

Anzeige
AW: Makro nach Zelländerung oder Buttonklick ausführen
09.07.2015 01:04:46
Rolf.dW
Hallo Sander,
mangels ausreichender "Bettschwere" habe ich noch an einer Alternative gebastelt:
https://www.herber.de/bbs/user/98724.xlsm
(Beinhaltet allerdings auch Änderungen im Worksheet-Makro)
Falls dir deine letzte Variante reicht, um so besser. Bei meiner Lösung werden deine ursprünglichen Anforderungen (Return/Enter-Button und/oder Mausklick auf SUCHEN) berücksichtigt.
Geht sicher noch schöner, aber das überschreitet dann meinen VBA-Horizont.
Hauptsache ist aber, dass es zunächst mal funktioniert. So, jetzt geh' ich mich Monden.
Gruß, Rolf
Anzeige

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige