Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
916to920
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
916to920
916to920
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

SpinButton

SpinButton
16.10.2007 12:05:17
Wilhelm
Hallo,
Ich habe folgende Aufgabenstellung:
Ich will durch Anklicken des Steuerelements „SpinButton“ den Wert in einer Excel-Zelle hoch- bzw. herunterzählen. Es funktioniert mit nachfolgendem Code.
Bei längerem Drücken der Maustaste will ich den Zählschritt vergrößern. Auch das funktioniert.
Das Problem:
Nach Loslassen der Maustaste und erneutem Anklicken des SpinButtons soll der Zählschritt wieder auf den kleinen Anfangswert gesetzt werden, aber es gelingt mir nicht, das zu programmiere.
Wer kann mir einen Tip geben, wie das geht?
Ich habe folgenden Code geschrieben:

Private Sub SpinButton1_Change()
Static n As Long
With SpinButton1
.SmallChange = 1
Selection.Value = .Value
n = n + 1
If n > 10 Then .SmallChange = 10
If n > 20 Then .SmallChange = 100
End With
End Sub


Herzlichen Dank für Eure Hilfe!
Gruß
Wilhelm

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: SpinButton
16.10.2007 18:14:07
Original
Hi,
schön wäre zu wiseen, ob der Spinbutton in einer Tabelle oder Userform ist.
Das ändert aber nichts daran, dass das direkt nicht gehen kann, da ein Spinbutton
kein MouseUp-Ereignis hat. Die statische Variable muss ja schließlich igendwie
auf 0 zurückgesetzt werden. Das wiederum geht nur mit einer zusätzlichen Variblen.
Der Ausweg wäre dazu das Exit/LostFocus- Ereignis zu verwenden, ist aber nicht
die 100%-Lösung.
mfg Kurt

AW: SpinButton
16.10.2007 19:28:00
Wilhelm
Hallo Kurt,
danke für Deine schnelle Antwort. Der SpinButton ist in einer Excel-Tabelle.
Leider hilft mir, Deine Antwort nicht weiter. Ich kann zwar mit Hilfe des LostFocus-Ereignisses die statische Variable zurücksetzen, aber das geht nicht, wenn ich die Maustaste loslasse, sondern nur, wenn ich woanders hin klicke, sonst tritt das LostFocus -Ereignis nicht ein.
Gibt es wirklich keine bessere Lösung? Ich habe die gewünschte Funktion schon oft in anderen Programmen gefunden, z.B. bei einer Uhr, wo die Zeiteinstellung zuerst langsam und bei längerem Drücken dann schnell läuft.
Oder ist vielleich der SpinButton nicht das richtige Steuerelement?
Gruß
Wilhelm

Anzeige
AW: SpinButton
16.10.2007 20:26:21
Original
Hi,
wenn ich eine Lösung wüßte, hätte ich das gepostet. Ich sehe keine Chance, die
Static-Variable zurückzusetzen, außer wie schon beschrieben.
In Visual Basic hat das UpDown-Control z.B. ein MouseUp-Ereignis, damit geht es
ohne Probleme.
mfg Kurt

AW: SpinButton
16.10.2007 23:37:31
Daniel
Hi
ja wenns mit dem MouseUp-Ereignis geht,
dann muss er sich den Spin-Button über zwei einfache Command-Buttons selber nachbauen.
(sollte ja nicht so schwer sein).
die Command-Buttons haben auch in Excel das MouseUp-Ereignis.
Gruß, Daniel

AW: SpinButton
21.10.2007 16:42:03
Wilhelm
Hallo,
wie Daniel geraten hat, habe ich den SpinButton durch 2 CommandButtons cmdPlus und cmdMinus nachgebaut und z.B. für den cmdPlus folgenden Code geschrieben:

Public Halt as Boolean
Private Sub cmdPlus_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As  _
Single, ByVal Y As Single)
Dim i As Long, Step As Integer
If Button  1 Then Exit Sub 'Ausführung nur bei linker Maustaste
Step = 1: Halt = False
Do
Selection.Value = Selection.Value + Step
For i = 0 To 20000000: Next   'verlangsamt das Hochzählen
Loop Until Halt = True
End Sub
Private Sub cmdPlus_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single,  _
ByVal Y As Single)
Halt = True
End Sub


Ich hatte mir vorgestellt, nach Eintreten des MouseDown-Ereignisses den Wert in der Do-Loop Schleife hochzuzählen, bis die Public-Variable "Halt" durch das MouseUp-Ereignis True wird und dadurch die Schleife abbricht.
Das Hochzählen funktioniert auch. Aber leider wird die Schleife nicht abgebrochen. Offenbar tritt das MouseUp-Ereignis auch beim Loslassen der Maustaste gar nicht ein, solange die Schleife noch läuft.
Hat jemand einen Tip dazu?
Eine weitere Frage:
Um die Hochzähl-Geschwindigkeit steuern zu können, habe ich die For-Next Schleife


For i = 0 To 20000000: Next   'verlangsamt das Hochzählen


eingefügt.
Kennt jemand hierzu eine elegantere Methode?
Ich kenne den Befehl


Application.Wait (Now + TimeValue("00:00:01"))

der nach jedem Hochzählen 1 sec Pause einfügt, aber 1 sec ist zu lang und ich weiß nicht, wie ich daraus z.B. 0,1 sec machen kann.
Danke für einen hilfreichen Tip!
Wilhelm

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige