Herbers Excel-Forum - das Archiv

In Userform-Textbox scrollen

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: In Userform-Textbox scrollen
von: Roland Hochhäuser

Geschrieben am: 22.02.2005 13:45:14
Hallo zusammen,
gegeben ist eine UF mit einem CommandButton und einer Textbox (multiline=true).
Mit folgendem Code ist es möglich, einen längeren mehrzeiligen Text aus Zelle A1 zeilenweise son in die Textbox einzulesen, dass er scrollt:
Option Explicit
Dim i As Integer
Private Sub CommandButton1_Click()
With TextBox1
.Visible = True
.Text = Cells(1, 1)
.SetFocus
i = 0
Do While i < .LineCount
.CurLine = i
Application.Wait Now + TimeSerial(0, 0, 1)
i = i + 1
Me.Repaint
Loop
.Text = ""
.Visible = False
End With
End Sub

Private Sub UserForm_Initialize()
TextBox1.Visible = False
End Sub

Das Ganze soll so etwas wie ein Abspann werden. Was noch nicht funktioniert ist folgendes:
- Wie schaffe ich es, den Code jederzeit zu unterbrechen auch ohne dass die Schleife ganz durch ist?
- Wie schaffe ich es, die Zeilen einigermaßen "ruckelfrei" einlesen zu lassen?
Nach Möglichkeit soll das mit Excel-Bordmitteln zu machen sein, Verweise auf Powerpoint etc. kommen nicht in Betracht. Von etwaigen API-Ansätzen habe ich allerdings keine Ahnung :-)
Vielen Dank im voraus von
Roland Hochhäuser
Bild

Betrifft: AW: In Userform-Textbox scrollen
von: Bert
Geschrieben am: 22.02.2005 17:43:09
Verschieb einfach die Top-Position kontinuierlich.
Bert
Bild

Betrifft: AW: In Userform-Textbox scrollen
von: Roland Hochhäuser

Geschrieben am: 23.02.2005 12:07:53
Hallo Bert,
ich habe es jetzt so gemacht:
Private Sub CommandButton1_Click()
Dim i As Integer, j As Long
On Error GoTo errorhandler
With TextBox1
.Visible = True
.Text = Cells(1, 1)
.SetFocus
i = 1
Do While i < .LineCount
.Top = 50
.CurLine = i
For j = 0 To 100000
If j Mod 1000 = 0 Then .Top = .Top - (j / 200000)
DoEvents
Next
i = i + 1
Loop
.Text = ""
.Visible = False
End With
errorhandler:
Unload Me
End Sub

Nachteil: die Scrollgeschwindigkeit hängt von der Leistungsfähigkeit des ausführenden Computers ab. Kennst du vielleicht einen "maschinenunabhängigen" Ansatz?
Grüße aus dem (wieder) verschneiten Berlin
Roland Hochhäuser
Bild

Betrifft: AW: In Userform-Textbox scrollen
von: Bert
Geschrieben am: 23.02.2005 14:24:35
Verwende einfach die API-Funktion Sleep(in Millisekunden).
Bert
Bild

Betrifft: AW: In Userform-Textbox scrollen
von: Roland Hochhäuser

Geschrieben am: 23.02.2005 16:00:06
Hallo Bert,
Vielen Dank für deinen Tip, er war wirklich hilfreich. Habe ich noch "Kredit" für eine letzte Frage: wie bekomme ich den Cursor weg oder unsichtbar? Hier der bisherige Code:
Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub CommandButton1_Click()
Dim i As Integer, j As Long
On Error GoTo errorhandler
With TextBox1
.Visible = True
.Text = Cells(1, 1)
.SetFocus
i = 1
Do While i < .LineCount
.Top = 50
.CurLine = i
For j = 0 To 100
.Top = .Top - (j / 300)
Sleep 10
DoEvents
Next
i = i + 1
Loop
.Text = ""
.Visible = False
End With
errorhandler:
Unload Me
End Sub

Wenn das noch hinzubekommen wäre, hätte ich den perfekten "Abspann". Deshalb bitte ich dich erneut um einen Tip :-)
Gruß Roland
 Bild
Excel-Beispiele zum Thema "In Userform-Textbox scrollen"
Text aus UserForm-Textbox in Variable einlesen Nur Buchstaben in eine UserForm-TextBox
Wert in UserForm-TextBox eintragen und selektieren Mit Drehfeld durch UserForm-TextBoxes blättern und Daten auslesen
Werte aus UserForm-TextBox in bestimmten Formate übertragen UserForm-TextBoxes ein- und ausblenden
Wert aus UserForm-TextBox in Tabelle suchen und in ListBox listen Suchbegriff aus einer UserForm-Textbox in Tabelle suchen und melden
Werte aus UserForm-TextBox und aus Tabelle gerundet anzeigen In einer UserForm-TextBox die Eingabe von Sonderzeichen verhindern