Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1912to1916
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

Userform Label-Größenänderung

Userform Label-Größenänderung
13.01.2023 09:46:22
MMRH
Hallo Allerseits,
ich kämpfe mit einer Idee, die ich bisher nicht umsetzen konnte. Ich bitte höflichst um Vorschläge oder Ideen wie sich folgender Code umsetzen lässt:

Sub test()
UserForm1.Show
Dim i As Integer, b As Integer
i = 10
UserForm1.Label1.Width = b
Do While b 
Das Ganze habe ich in einem Modul. Ich möchte, dass sich die Label-Weite jede Sekunde erhöht. Debug-Print zeigt auch, dass das klappt. Jedoch wird die Userform nicht entsprechend angezeigt.
Danke.

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Userform Label-Größenänderung
13.01.2023 10:06:22
ChrisL
Hi
Z.B.

Private Sub UserForm_Activate()
Dim b As Integer
b = 10
Do While b 
Gerne mal das Stichwort "Fortschrittsbalken" recherchieren. Sieht mindestens danach aus.
cu
Chris
AW: Userform Label-Größenänderung
13.01.2023 10:46:38
ChrisL
Hinweis: Wenn du über ein Standard-Modul gehst, dann müsste die ShowModal Eigenschaft vom Userform auf False gestellt werden. Ohne die Einstellungsänderung wird der Code erst beim Schliessen des UF ausgeführt.

Sub t()
UserForm1.Show
MsgBox "test"
End Sub

AW: Userform Label-Größenänderung
13.01.2023 16:55:04
MMRH
Hi, danke. Es hat daran gescheitert. Debug.print hat das irrtümlich für mich ersetzt....
Anzeige
AW: Userform Label-Größenänderung
15.01.2023 20:52:10
MMRH
Hi danke nochmal.
Fortschrittsbalken eher nicht. Ich habe vor eine Art Titeleinblendung zu erschaffen...
Das Ganze ist aber noch nicht flüssig. Momentan:

Private Sub UserForm_Activate()
Dim h As Double
h = 42
Do While h >= 6
UserForm2.Label2.Height = h
h = h - 1
Application.Wait (Now + TimeValue("00:00:01") / 2)
UserForm2.Repaint
Loop
End Sub
Wenn ich jede Sekunde die Höhe ändere ist es noch sehr ruckartig. Daher dachte ich, ich könnte alle 0,5 Sekunde eine Änderung oder gar alle 0,1 Sekunde eine Änderung hervorrufen.... Ähnlich FPS.... Je schneller, desto flüssiger... aber das scheint nicht möglich zu sein. Das /2 in der Klammer führt dazu, dass der Balken in der Userform augenblicklich verschwindet.
Gibt es dazu einen Work-Around oder andere Ideen? Danke.
Anzeige
AW: Userform Label-Größenänderung
16.01.2023 08:35:39
ChrisL
Hi
Natürlich Geschmackssache, aber persönlich würde ich darauf verzichten.

Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)

Private Sub UserForm_Activate()
Dim b As Integer
For b = 10 To 100
UserForm1.Label1.Width = b
UserForm1.Repaint
Sleep (20)
Next b
End Sub
cu
Chris
AW: Userform Label-Größenänderung
17.01.2023 09:02:06
MMRH
Hi Chris,
danke für den Input. Die Zwei Code-Blöcke zusammen laufen, wenn ich den ersten Block direkt unter option explicit in einem Modul stehen habe und den zweiten in der Userform. Das als Ergänzung falls irgend wer sich das noch einmal ansieht.
Mich interessiert auch weshalb Du das für keine gute Idee hältst (Geschmackssache). Ganz unironisch.
Danke
Anzeige
AW: Userform Label-Größenänderung
17.01.2023 11:00:36
ChrisL
Hi
Danke für die Ergänzung. Ganz im Spirit des Forums; gefällt mir.
Geschmacksache meine ich so wie ich es sage, erstmal ohne Wertung. Es handelt sich um eine persönliche Ansicht von mir. Ich finde "Animationen" nur nervig. Es tut nichts zur Sache und macht das Bild unnötig "nervös". Zudem blockiert es die Bearbeitung, bis die Animation vollständig abgelaufen ist.
In einer Applikation, welche auf die Verarbeitung von Daten (Tabellenkalkulation) ausgerichtet ist, empfinde ich solche Sachen als Spielerei. Oft holen einem solche Extras früher oder später wieder ein, weil es den Code unübersichtlich macht und dabei das Wesentliche (die Datenverarbeitung) unter geht. Z.B. hat man bei einem allfälligen Fehler mehr zum Debuggen und es stellt eine zusätzliche Fehlerquelle dar.
Die Methode, um mit Millisekunden zu arbeiten, weist eine zusätzliche potenzielle Fehlerquelle auf. Es wird auf kernel32 verwiesen, was eine Datei vom Betriebssystem Windows ist, also nicht Bestandteil von Excel.
- Folglich wird der Code auf Apple nicht laufen
- Mit der Umstellung von 32bit auf 64bit benötigten solche API Schnittstellen eine Anpassung im Code. PtrSafe ist im Code nun zwar enthalten, aber es zeigt die Fehleranfälligkeit.
- Wenn Windows eines Tages entscheidet kernel32 zu ersetzen oder zu löschen, wird der Code nicht mehr funktionieren.
Tönt jetzt alles dramatisch, ist es aber nicht. Spielereien kann man machen, muss man aber nicht. Für mich persönlich wäre das Aufwand-/Ertragsverhältnis einfach nicht gegeben bzw. ich würde mich eher auf eine benutzerfreundliche und fehlerfreie Datenverarbeitung konzentrieren und dort die Zeit investieren. Ist zwar weniger effektvoll, aber langfristig nachhaltiger.
cu
Chris
Anzeige
Übergabe fehlt
13.01.2023 10:09:29
 Matthias
Hallo
Du musst schon dem Label den neuen Wert mitteilen!
i = i + 10
UserForm1.Label1.Width = b
UserForm1.Repaint
MfG Matthias
AW: Userform Label-Größenänderung
13.01.2023 10:15:01
volti
Hallo,
Du setzt innerhalb der Schleife ja gar nicht die Labelbreite. Da kann sich ja nichts ändern.
Hier eine (ungetestete) Anregung dazu...
Code:


Sub test() Dim b As Integer UserForm1.Show b = 10 Do While b <= 100 UserForm1.Label1.Width = b Application.Wait (Now + TimeValue("00:00:01")) UserForm1.Repaint b = b + 10 Loop End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: Userform Label-Größenänderung
13.01.2023 16:54:08
MMRH
Hi, Danke. Das hilft.
Super Ignoranz, auf meine Antwort :-(
13.01.2023 23:04:47
 Matthias
weiter so !!
AW: Super Ignoranz, auf meine Antwort :-(
14.01.2023 20:15:33
MMRH
Auch dir Danke.

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige