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

Forumthread: Blinkender Button

Blinkender Button
12.12.2012 14:18:19
JACKD
Hallo Gemeinde
Ich hätte mal wieder ein anliegen,
Wie bekomm ich es hin, dass wenn ein Button gedrückt wird, und eine bedingung nicht erfüllt ist, ein anderer Button so etwa 10 Sekunden lang aufblinkt / die Farbe ändert oder dergleichen.
Warum? ich hab verschiedene Prozdeuren. Die der Nutzer über eine UF ansteuern kann.
Nun gibt es zb. die Möglichkeit auswertung 1 und ausertung2 über einen Button zu starten.
Nun möchte ich (auswertung 2 benötigt zwingend auswertung 1 ) dass wenn zuerst auswertung 2 geklickt wird, dass ein MSGBOX auftaucht mit dem hinweis und anschliessend der Button für auswertung 1 blinkt
Kriterien abfragen und dergleichen ist nicht das Problem. ich suche schlicht den Befehl fürs "blinken"
Thanks in advance

Anzeige

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Blinkender Button
12.12.2012 14:45:00
JACKD
Okay hab was gefunden

Public Sub BLINKER()
Dim aktiv As Boolean, count As Integer, Startfarbe
aktiv = True
Startfarbe = MASTERBEARBEITEN.CommandButton15.BackColor
'starten der endlosschleife
Do
count = count + 1
DoEvents
If aktiv = False Then Exit Do
If count Mod 2 = 0 Then
MASTERBEARBEITEN.CommandButton15.BackColor = Startfarbe
Else
MASTERBEARBEITEN.CommandButton15.BackColor = vbGreen
End If
Application.Wait TimeSerial(Hour(Now()), Minute(Now()), Second(Now()) + 1) ' +1 bedeutet er  _
wartet immer 1 sek beim farbwechsel
Loop Until count = -1
End Sub
Für den den es Interessiert =)

Anzeige
AW: Blinkender Button
12.12.2012 15:06:07
JACKD
Nur wie bekomm ich es wieder "abgeschalten" ohne die Mappe zu schliessen bzw. das Makro manuell zu beenden
Grüße

z.B. Loop Until count = 10 owT
12.12.2012 15:20:57
Henrik

die Geister, die ich rief...
12.12.2012 15:25:01
Rudi
Hallo,
Wenn A1 nicht leer ist, wird gestoppt.
Public Sub BLINKER()
Dim aktiv As Boolean, count As Boolean, Startfarbe
Startfarbe = vbYellow
'starten der endlosschleife
Do
count = Not count
aktiv = Masterbearbeiten.[A1] = ""
DoEvents
If Not count Then
Masterbearbeiten.CommandButton1.BackColor = Startfarbe
Else
Masterbearbeiten.CommandButton1.BackColor = vbGreen
End If
Application.Wait Now + TimeSerial(0, 0, 1) ' +1 bedeutet er _
wartet immer 1 sek beim farbwechsel
Loop Until Not aktiv
End Sub

Gruß
Rudi

Anzeige
AW: die Geister, die ich rief...
12.12.2012 15:38:58
JACKD
Die Geister find ich gut..
=)
Aber hab grad festgestellt, dass das nicht läuft, da er jedes worksheet abfragt. muss erstmal die Bedingung ändern...
Hat jemand nen vorschlag das vorhandensein eines Worksheets ohne schleife abzufragen, bzw. die schleife abzufangen das nicht ständig der Blinker gestartet wird?
Grüße

Anzeige
AW: die Geister, die ich rief...
12.12.2012 15:40:56
Rudi
Hallo,
da er jedes worksheet abfragt
wer?
Gruß
Rudi

AW: die Geister, die ich rief...
12.12.2012 15:46:37
JACKD
Sorry mein Fehler =()
Ich hab ein Makro von dem der Blinker gestartet wird.
sah bisher so aus
für jedes ws
wenn ws.("Name") da ist, dann mach was ich will
sonst melde dich (Blinke)
nächstes ws
das ist aber doof weil es ja dann jedes mal wenn es nicht da ist, der Blinker neu gestartet wird

Anzeige
AW: die Geister, die ich rief...
12.12.2012 16:15:57
JACKD
Was ich grad festgestellt hab rudi,
da ist ja der Befehl "End" verbastelt...
DAnn wird doch auch die UF geschlossen auf der der Button ist.. ? Oder hab ich grad nen denkfehler?
Grüße

AW: die Geister, die ich rief...
12.12.2012 16:54:14
Rudi
Hallo,
DAnn wird doch auch die UF geschlossen auf der der Button ist.. ? Oder hab ich grad nen denkfehler
Nö.
Von einer UF war bisher nicht die Rede.
In ein Modul:
Public dteTime
Sub BLINKER()
Dim Startfarbe
Static bln As Boolean
Startfarbe = vbYellow
bln = Not bln
If Not bln Then
Masterbearbeiten.CommandButton1.BackColor = Startfarbe
Else
Masterbearbeiten.CommandButton1.BackColor = vbGreen
End If
dteTime = Now + TimeValue("00:00:01")
Application.OnTime dteTime, "Blinker", , True
End Sub

In der UF:
Private Sub CommandButton1_Click()
Application.OnTime dteTime, "Blinker", , False
End Sub

Gruß
Rudi

Anzeige
AW: die Geister, die ich rief...
13.12.2012 09:14:04
JACKD
Hallo Rudi
Vielen Dank für deine Lösung..
Die ersten durchläufe sehen auch ganz gut aus..
Und ja Ich hab nix von einer UF erwähnt.. das alte Problem. Man muss so konkret denken dass Problem zu beschreiben, aber so unkonkret zu sein, alle wichtigen Gegebenheiten zu nennen =)
Grüße

Anzeige
AW: die Geister, die ich rief...
13.12.2012 09:27:22
JACKD
Hallo Rudi ich hätte da noch ne Frage,
Wie kann ich denn das Application.OnTime-event abfangen wenn ich nur "regulär" vorgehe sprich dass der Button nicht blinkt.
Er bringt mir nämlich dann den Fehler das die Methode fehlgeschlagen ist.
Grüße

AW: die Geister, die ich rief...
13.12.2012 10:21:09
Rudi
Hallo,
Private Sub CommandButton1_Click()
If dteTime Then
Application.OnTime dteTime, "Blinker", , False
dteTime=0
End If
End Sub

Oder einfach On Error Resume Next davor.
Gruß
Rudi
PS: "schalten, schielt, geschalten" ist Lucs Reaktion auf deine Frage Nur wie bekomm ich es wieder "abgeschalten" ohne ..., da es abgeschaltet heißen muss.

Anzeige
AW: die Geister, die ich rief...
13.12.2012 10:30:43
JACKD
Danke Rudi
auf on error hätt ich auch selbst kommen können =)
GRazie

alternativ
12.12.2012 15:30:51
Rudi
Hallo,
Public Sub BLINKER(Optional bStop As Boolean)
Dim count As Boolean, Startfarbe
Startfarbe = vbYellow
If bStop Then
Masterbearbeiten.CommandButton1.BackColor = Startfarbe
End
End If
'starten der endlosschleife
Do
count = Not count
DoEvents
If Not count Then
Masterbearbeiten.CommandButton1.BackColor = Startfarbe
Else
Masterbearbeiten.CommandButton1.BackColor = vbGreen
End If
Application.Wait Now + TimeSerial(0, 0, 1) ' +1 bedeutet er _
wartet immer 1 sek beim farbwechsel
Loop
End Sub

Private Sub CommandButton1_Click()
BLINKER True
End Sub

Gruß
Rudi

Anzeige
schalten - schielt - geschalten ! oK
12.12.2012 17:25:44
Luc:-?
:-?

Hö? owT
13.12.2012 09:41:42
JACKD

Hö? owT
13.12.2012 09:42:05
JACKD
:-)
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Blinkender Button in Excel VBA


Schritt-für-Schritt-Anleitung

Um einen blinkenden Button in Excel zu erstellen, kannst du den folgenden VBA-Code verwenden. Dieser Code sorgt dafür, dass der Button blinkt, wenn eine bestimmte Bedingung nicht erfüllt ist.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul ein: Rechtsklick auf "VBAProject (DeineArbeitsmappe)" > "Einfügen" > "Modul".
  3. Kopiere den folgenden Code in das Modul:
Public dteTime
Sub BLINKER()
    Dim Startfarbe
    Static bln As Boolean
    Startfarbe = vbYellow
    bln = Not bln
    If Not bln Then
        Masterbearbeiten.CommandButton1.BackColor = Startfarbe
    Else
        Masterbearbeiten.CommandButton1.BackColor = vbGreen
    End If
    dteTime = Now + TimeValue("00:00:01")
    Application.OnTime dteTime, "BLINKER", , True
End Sub
  1. Füge den folgenden Code in den Button ein, der das Blinken starten soll:
Private Sub CommandButton1_Click()
    BLINKER
End Sub
  1. Um das Blinken zu stoppen, verwende diesen Code:
Private Sub CommandButton2_Click()
    Application.OnTime dteTime, "BLINKER", , False
End Sub

Häufige Fehler und Lösungen

  • Fehler: "Methode fehlgeschlagen" beim Stoppen des Blinkens

    • Stelle sicher, dass der dteTime-Wert vor dem Stoppen gesetzt wurde. Füge eine If-Bedingung ein, um zu prüfen, ob dteTime bereits gesetzt ist:
    Private Sub CommandButton2_Click()
        If dteTime Then
            Application.OnTime dteTime, "BLINKER", , False
            dteTime = 0
        End If
    End Sub
  • Problem: Blinken funktioniert nicht richtig

    • Überprüfe, ob der Button-Name korrekt ist (z.B. CommandButton1). Der Name muss mit dem Namen des Buttons in deiner UserForm übereinstimmen.

Alternative Methoden

Eine alternative Methode besteht darin, eine Schleife zu verwenden, um das Blinken zu steuern. Hier ist ein Beispiel:

Public Sub BLINKER(Optional bStop As Boolean)
    Dim count As Boolean, Startfarbe
    Startfarbe = vbYellow
    If bStop Then
        Masterbearbeiten.CommandButton1.BackColor = Startfarbe
        End
    End If
    Do
        count = Not count
        DoEvents
        If Not count Then
            Masterbearbeiten.CommandButton1.BackColor = Startfarbe
        Else
            Masterbearbeiten.CommandButton1.BackColor = vbGreen
        End If
        Application.Wait Now + TimeSerial(0, 0, 1)
    Loop
End Sub

Praktische Beispiele

Ein häufiges Szenario ist, dass der Button nur blinken soll, wenn eine andere Bedingung erfüllt ist, wie z.B. das Vorhandensein eines Wertes in einer Zelle. Hier ist ein Beispiel:

Public Sub BLINKER()
    Dim Startfarbe
    Startfarbe = vbYellow
    If Masterbearbeiten.Range("A1").Value = "" Then
        Masterbearbeiten.CommandButton1.BackColor = Startfarbe
    Else
        Exit Sub
    End If
    ' Rest des Blinkcodes
End Sub

Tipps für Profis

  • Verwende DoEvents, um die Benutzeroberfläche reaktionsfähig zu halten, während der Button blinkt.
  • Setze Application.Wait, um den Blinkeffekt zu steuern. Ein Wert von 1 Sekunde ist oft ideal.
  • Teste deinen Code gründlich, um sicherzustellen, dass er auch unter verschiedenen Bedingungen stabil läuft.

FAQ: Häufige Fragen

1. Wie kann ich den Blink-Effekt anpassen? Du kannst die Farbe und die Blinkfrequenz anpassen, indem du die Werte in Startfarbe und Application.Wait änderst.

2. Was passiert, wenn ich die Arbeitsmappe schließe? Wenn du die Arbeitsmappe schließt, werden alle laufenden Makros gestoppt. Stelle sicher, dass du die Blinker-Funktion beendest, bevor du die Datei schließt.

3. Kann ich mehrere Buttons gleichzeitig blinken lassen? Ja, du kannst den Code für jeden Button anpassen. Achte darauf, dass jeder Button seine eigene Instanz der Blinker-Funktion hat, falls du sie unabhängig steuern möchtest.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige