Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Mousemove zurücksetzen

Forumthread: Mousemove zurücksetzen

Mousemove zurücksetzen
24.07.2005 13:42:54
Basti
Hallo,
das mit dem Mousemove funktioniert jetzt prima mit dem Code:

Private Sub CommandButton1_MouseMove(ByVal Button As Integer, _
ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If CommandButton1.BackColor = RGB(0, 255, 0) Then
CommandButton1.BackColor = RGB(255, 0, 0)
Sheets("Tabelle1").Activate
Dim A As Range
Set A = Range("b:b").Find("Dekubitus")
A.Offset(0, 2).Select
With UserForm4
TextBox1.Value = ActiveCell.Value
TextBox2.Value = ActiveCell.Offset(1, 0).Value
End With
End If
End Sub

allerdings habe ich jetzt das Problem das wenn ich einmal über den den Button gefahren bin der Commandbutton gesetzt ist!
ich möchte aber das wenn ich mit der Maus vom Commandbutton runtergehe dieser wieder zurückgesetzt wird so das er später erneut angewählt werden kann
Gruß Basti
Anzeige

22
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mousemove zurücksetzen
24.07.2005 13:50:41
Unbekannter
wenn du mit der maus auf deine userform gehst löst du das dann aus:

Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
'so und hier musst du alles was gesetzt worden ist (farben usw) zurücksetzen.
End Sub

und dann ist der button freigegeben fürs nächste mal.
Anzeige
AW: Mousemove zurücksetzen
24.07.2005 13:59:15
Basti
Hallo Unbekannter,
Ja, da hast du vollkommen recht aber ich möchte die Farbe erst wieder zurücksetzen wenn ein anderer Commandbutton angewählt wird.
weißt du wie das geht
Gruß Basti
AW: Mousemove zurücksetzen
24.07.2005 13:56:34
Basti
Hmm,
also ich glaub ich weiß wo das Problem liegt, es liegt an den Farben.
Ich müsste also erreichen das wenn ich über einen commandbutton fahre sich zusätzlich alle anderen Commandbuttons wieder grün färben. Dann werden sie wohl auch wieder anzuwählen sein.
Weiß jemand wie das geht
Gruß Basti
Gruß Basti
Anzeige
AW: Mousemove zurücksetzen
24.07.2005 14:02:00
Unbekannter
Da bei dir der auslöser von den farben abhängig ist musst du sie immer dem entsprechend setzen und hat sich deine frage damit erledigt oder brauchst du noch was?
AW: Mousemove zurücksetzen
24.07.2005 14:10:10
Basti
Hmm, ja das ist mir schon klar aber ich möchte quasi das wenn ich auf eine Commandbutton gehe (ich habe mehrere) das sich dann alle anderen wieder grün färben, denn:
1, dann kann ich alle anderen nachher wieder anwählen, denn sie sind ja wieder grün
2, er ist solange rot wie ich nix anderes anwähle und damit weiß ich wo ich bin verstehst du
also brauch ich einen Code der in etwa so aussieht:
Dim shpshape As Controls
For Each shpshape In UserForm4.Controls
If shpshape.Type = msoControlButton And shpshape.BackColor = RGB(255, 0, 0) Then
shpshape.BackColor = RGB(0, 255, 0)
End If
Next shpshape
der funktioniert aber so nicht weil die Bezeichnungen nicht stimmen. Nur leider komme ich nicht dahinter wie die richtigen Bezeichnungen sind
Gruß Basti
Anzeige
AW: Mousemove zurücksetzen
24.07.2005 14:23:41
Unbekannter
sieht nicht toll aus aber ich kenne deine bezeichnungen nicht vielleicht kannst du übern index gehen oder so, aber du hast doch gesagt das du die buttons färben willst was haben dann shapes damit zu tun
beispiel:

Private Sub CommandButton1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
CommandButton1.BackColor = 12
CommandButton2.BackColor = 12
CommandButton3.BackColor = 12
CommandButton4.BackColor = 12
CommandButton5.BackColor = 12
End Sub

Anzeige
AW: Mousemove zurücksetzen
24.07.2005 14:32:24
Basti
hmm, so funktioniert es sicher
allerdings habe ich sehr sehr viele Commandbuttons und müsste dann diese Prozedur
CommandButton1.BackColor = rgb(0,255,0)
CommandButton2.BackColor = rgb(0,255,0)
CommandButton3.BackColor = rgb(0,255,0)
CommandButton4.BackColor = rgb(0,255,0)
CommandButton5.BackColor = rgb(0,255,0)
usw. usw.
für jeden einzelnen Button in den Code aller dieser Buttons reinschreiben, das ist ja wahnsinn denn ich bräuchte ja bei jedem Button einfach nur die Anweisung reinschreiben
das wenn ich die maus darüber bewege jeder andere Commandbutton dieser Userform der gerade rot gefärbt ist wieder grün wird, fertig (aber ich weiß nicht wie das geht)
Gruß Basti
Anzeige
AW: Mousemove zurücksetzen
24.07.2005 14:36:15
Unbekannter
stimmt aber wenn die alle unterschiedlich heißen und du nicht übern index kannst weiß ich nicht wie , es gibt bestimmt ein weg aber da musst du mal ramses oder hajo_zi oder die andern frage.
AW: Mousemove zurücksetzen
24.07.2005 15:10:02
Ramses
Hallo
Auch das UF hat ein MouseMove Ereignis

Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
CommandButton1.BackColor = 12
CommandButton2.BackColor = 12
CommandButton3.BackColor = 12
CommandButton4.BackColor = 12
CommandButton5.BackColor = 12
End Sub

Wobei mir beim lesen dieses Beitrages nach wie vor schleierhaft ist, wozu das gut sein soll.
Ein MouseMove Ereignis zum einlesen von Daten in eine Textbox erachte ich als problematisch.
Gruss Rainer
Anzeige
AW: Mousemove zurücksetzen
24.07.2005 15:20:13
Unbekannter
wenn er vom button runter geht sollen die wieder zutückgesetz werden und das erste was er nach dem button "berührt" ist die userform und das kann man ja ändern wie man will.
aber noch was ich arbeite gerade an sein problem und habe schon was könntest du dir das mal anschauen und sagen was da falsch ist es geht nicht.

Private Sub test_Click()
Dim i As Integer
For i = 0 To Me.Controls.Count - 1
If TypeOf Controls(i) Is commandbutton Then
Controls(i).BackColor = vbRed
End If
Next i
End Sub

Anzeige
Problem gelöst
24.07.2005 15:24:29
Unbekannter
Gut, der code geht doch habe nur vergessen den style auf graphich zu ändern (echt blöd) also basti damit werden alle buttons angesprochen egal was für ein name die haben,kommst du jetzt allein zurecht? (einfach in eine prozedur und dann immer mit call)
AW: Problem gelöst
24.07.2005 15:29:44
Ramses
Hallo
Damit werden dann aber auch "OK" und "Abbruch" oder sonstige Schaltflächen "Rot" die nicht verändert worden sind.
Gruss Rainer
Anzeige
AW: Problem gelöst
24.07.2005 15:33:51
Unbekannter
die muss er dann einzeln ändern, aber sonst gibt es keine andere lösung als manuel alle zu ändern und wenn er 50 buttons hat ist das dass kleinere übel oder?.
AW: Weiterspielen
24.07.2005 22:56:26
Basti
Heureka ich hab es dank der Beispieldatei von Nepumuk
das ganze sieht nun folgendermaßen aus

Private Sub CommandButton1_MouseMove(ByVal Button As Integer, _
ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If CommandButton1.BackColor = RGB(0, 255, 0) Then
Dim myControl As Control, inIndex As Integer
For Each myControl In Me.Controls
If TypeOf myControl Is MSForms.CommandButton And _
myControl.BackColor = RGB(255, 0, 0) Then
myControl.BackColor = RGB(0, 255, 0)
End If
Next
CommandButton1.BackColor = RGB(255, 0, 0)
Sheets("Tabelle1").Activate
Dim A As Range
Set A = Range("b:b").Find("Dekubitus")
A.Offset(0, 2).Select
With UserForm4
TextBox1.Value = ActiveCell.Value
TextBox2.Value = ActiveCell.Offset(1, 0).Value
End With
End If
End Sub

so funktioniert es wunderbar, es ist perfekt.
Und wie gesagt das Ereigniss wird nur einmal beim darüberfahren ausgelöst wegen der Farben (siehe Erklärung in anderer Antwort)
Danke für eure Hilfe
Gruß Basti
Anzeige
AW: Mousemove zurücksetzen
24.07.2005 15:39:25
Nepumuk
Hi Rainer,
da muss ich dir Recht geben. Bei einem "normal" großen Button löse ich das Ereignis beim drüberfahren 10 bis 20 mal aus.
Gruß
Nepumuk
Excel & VBA – Beispiele
AW: Mousemove zurücksetzen
24.07.2005 15:44:37
Unbekannter
Ja,aber wenn sein rechner schnell genug ist was solls und wenn es ihm gefällt warum nicht ist mal was anderes als immer nur klicken.
Anzeige
AW: Mousemove zurücksetzen
24.07.2005 22:34:25
Basti
Also,
ich löse das Ereigniss nur einmal aus weil sich der angesprochene Button dann von grün auf rot verfärbt
das Ereigniss findet aber nur statt wenn der Button grün ist.
aber wenn ich einen anderen Button berühre (der jetzt mit der Berührung rot wird) muss sich der vorher angesprochene (der jetzt quasi auch noch rot ist) wieder grün färben.
Nebenbei gesagt, andere Buttons (die je nach Situation) nicht angewählt werden sollen erhalten keine Farbe und haben somit auch keine Funktion.
Das ganze System funktioniert eigentlich recht gut wenn ich doch nur die Geschichte da oben in den Griff bekäme.
Ich werd mich jetzt mal durch eure zahlreichen Antworten ackern, vielen Dank schon mal.
Gruß Basti
Anzeige
AW: Mousemove zurücksetzen
24.07.2005 22:39:46
Ramses
Hallo
"...ich löse das Ereigniss nur einmal..."
:-))))
Schreib mal in deinen Code
MsgBox "Kuckuck"
Aber fahr nur vorsichtig über den Rand deines Buttons :-)
Gruss Rainer
AW: Mousemove zurücksetzen
24.07.2005 22:59:25
Basti
Hallo Ramses,
nein ernsthaft wenn der die andere Farbe hat spricht er nicht an schau dir mal den Code an (s. andere Antwort)
Gruß Basti
Anzeige
AW: Mousemove zurücksetzen
25.07.2005 00:11:57
Ramses
Hallo
dies bezog sich auf "...ich löse das Ereignis nur einmal aus..."
Dass dein Code innerhalb der If-Schleife vielleicht nur einmal ausgeführt wird, mag sein, aber das Ereignis als solches wird wesentlich öfters ausgelöst.
Anyway,.. du hast ja deine Lösung :-)
Gruss Rainer
;
Anzeige

Infobox / Tutorial

Mousemove in Excel VBA zurücksetzen


Schritt-für-Schritt-Anleitung

Um den MouseMove-Effekt in einem Excel VBA-Projekt zurückzusetzen, kannst Du die folgenden Schritte befolgen:

  1. Öffne den Visual Basic for Applications (VBA) Editor:

    • Drücke ALT + F11 in Excel.
  2. Wähle das entsprechende UserForm aus:

    • Klicke im Projektfenster auf Dein UserForm, in dem sich die CommandButtons befinden.
  3. Füge den folgenden Code in das UserForm ein:

    Private Sub CommandButton1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
       Dim myControl As Control
       For Each myControl In Me.Controls
           If TypeOf myControl Is MSForms.CommandButton Then
               myControl.BackColor = RGB(0, 255, 0) ' Setzt alle CommandButtons auf grün
           End If
       Next myControl
       CommandButton1.BackColor = RGB(255, 0, 0) ' Setzt den aktuellen Button auf rot
    End Sub
  4. Füge den MouseMove-Ereignis für das UserForm hinzu:

    • Um den Zustand zurückzusetzen, kannst Du auch das MouseMove-Ereignis des UserForms verwenden:
      Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
      ' Hier kannst Du den Code einfügen, um die Farben zurückzusetzen
      End Sub

Häufige Fehler und Lösungen

  1. Problem: Der CommandButton bleibt rot und wird nicht zurückgesetzt.

    • Lösung: Stelle sicher, dass der Code zum Zurücksetzen der Farben auch im UserForm_MouseMove-Ereignis implementiert ist.
  2. Problem: Alle Buttons färben sich rot, auch die, die nicht betroffen sein sollten.

    • Lösung: Füge eine Bedingung hinzu, die sicherstellt, dass nur die relevanten Buttons gefärbt werden.

Alternative Methoden

Wenn Du eine größere Anzahl an CommandButtons hast, kannst Du den Code effizienter gestalten, indem Du Arrays oder Collections verwendest. Damit kannst Du alle Buttons mit einer Schleife ansprechen, ohne jeden Button einzeln zu benennen.

Beispiel:

Dim btn As Control
For Each btn In Me.Controls
    If TypeOf btn Is MSForms.CommandButton Then
        btn.BackColor = RGB(0, 255, 0) ' Setzt alle Buttons zurück
    End If
Next btn

Praktische Beispiele

Hier ist ein Beispiel für eine UserForm mit mehreren CommandButtons:

Private Sub CommandButton1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Call ResetButtonColors
    CommandButton1.BackColor = RGB(255, 0, 0)
End Sub

Private Sub ResetButtonColors()
    Dim btn As Control
    For Each btn In Me.Controls
        If TypeOf btn Is MSForms.CommandButton Then
            btn.BackColor = RGB(0, 255, 0)
        End If
    Next btn
End Sub

Tipps für Profis

  • Verwende Konstanten für Farben: Anstatt RGB-Werte hart zu kodieren, definiere sie als Konstanten zu Beginn Deines Codes. So bleibt Dein Code übersichtlicher.
  • Vermeide das häufige Auslösen von MouseMove-Ereignissen: Um die Leistung zu verbessern, kannst Du den Code so optimieren, dass das MouseMove-Ereignis nur bei Bedarf ausgelöst wird.

FAQ: Häufige Fragen

1. Wie viele CommandButtons kann ich in einem UserForm haben? Du kannst eine beliebige Anzahl von CommandButtons hinzufügen, aber achte darauf, dass die Performance bei sehr vielen Controls beeinträchtigt werden kann.

2. Kann ich die MouseMove-Ereignisse für andere Controls nutzen? Ja, die Technik kann auch auf andere Steuerelemente wie Labels oder TextBoxen angewendet werden, indem Du den entsprechenden Code in deren MouseMove-Ereignisse einfügst.

3. Was ist der Unterschied zwischen UserForm_MouseMove und CommandButton_MouseMove? UserForm_MouseMove wird ausgelöst, wenn die Maus über das gesamte UserForm bewegt wird, während CommandButton_MouseMove nur ausgelöst wird, wenn die Maus über den spezifischen CommandButton bewegt wird.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige