Durch Srcolleiste in Formular Tabelle scrollen

Hallo,

möchte gerne in einem Formular eine Scrolleiste einfügen, die aber nicht das Formular sondern die dahinter liegende Tabelle scrollt. Ist das möglich? Wenn ja, wie?

Danke im voraus für die Hilfe!

Hallo Kerstin,

hab mich mal ein wenig durch die EXCEL-Hilfe gewühlt und bin fündig geworden, wie ich die Scrollbars auswerten kann. Mit nachfolgendem den Scrolleisten zugeordneten Codes wird die per Scrolleiste ausgewählte Zeile bzw. Spalte am oberen bzw. linken Rand des Fensters angezeigt. Das Scrollen ist möglich per Schieber oder als Einzelspalten-/Einzelzeilenschaltung. Den Seitenscroll konnte ich leider nicht hinbekommen.

Die label ‚Label1‘ und ‚Label2‘ zeigen den aktuell an der Leiste eingestellten Wert an. Auf die Labels kann man natürlich verzichten und den entsprechenden Code weglassen. Bezeichnungen der Label und der Scrollbars muß du naturlich an dein Formular anpassen.

' Initialisieren des Formblatts beim Öffnen
Private Sub UserForm\_Initialize()
Dim ScrollSavedV As Integer, ScrollSavedH As Integer
'Initialisierung der vertikalen Bildlaufleiste
 ScrollBar1.Min = 4
 ScrollBar1.Max = 300
 ScrollBar1.Value = ActiveWindow.ScrollRow
 Label1.Caption = ScrollBar1.Value
'Initialisierung der horizontalen Bildlaufleiste
 ScrollBar2.Min = 2
 ScrollBar2.Max = 20
 ScrollBar2.Value = ActiveWindow.ScrollColumn
 Label2.Caption = Chr$(ScrollBar2.Value + 64)
End Sub

' Code für vertikale Bildlaufleiste

Private Sub ScrollBar1\_Change() ' Wertänderung bei Zeilenscroll
 Label1.Caption = (ScrollSavedV + ScrollBar1.Value)
 ActiveWindow.ScrollRow = ScrollSavedV + ScrollBar1.Value
End Sub

Private Sub ScrollBar1\_Scroll() 'Wertänderung mit Schieber
 Label1.Caption = (ScrollSavedV + ScrollBar1.Value)
 ActiveWindow.ScrollRow = ScrollSavedV + ScrollBar1.Value
End Sub

Private Sub ScrollBar1\_Exit(ByVal Cancel As MSForms.ReturnBoolean)
 Label1.Caption = (ScrollSavedV + ScrollBar1.Value)
 ScrollSavedV = ScrollBar1.Value
End Sub

' Code für horizontale Bildlaufleiste

Private Sub ScrollBar2\_Change() ' Wertänderung bei Spaltenscroll
 Label2.Caption = Chr$((ScrollSavedH + ScrollBar2.Value) + 64)
 ActiveWindow.ScrollColumn = ScrollSavedH + ScrollBar2.Value
End Sub

Private Sub ScrollBar2\_Scroll() 'Wertänderung mit Schieber
 Label2.Caption = Chr$((ScrollSavedH + ScrollBar2.Value) + 64)
 ActiveWindow.ScrollColumn = ScrollSavedH + ScrollBar2.Value
End Sub

Private Sub ScrollBar2\_Exit(ByVal Cancel As MSForms.ReturnBoolean)
 Label2.Caption = Chr$((ScrollSavedH + ScrollBar2.Value) + 64)
 ScrollSavedH = ScrollBar2.Value
End Sub

Gruß
Franz

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Kerstin,

hab mich mal ein wenig durch die EXCEL-Hilfe gewühlt und bin
fündig geworden, wie ich die Scrollbars auswerten kann. Mit
nachfolgendem den Scrolleisten zugeordneten Codes wird die per
Scrolleiste ausgewählte Zeile bzw. Spalte am oberen bzw.
linken Rand des Fensters angezeigt. Das Scrollen ist möglich
per Schieber oder als Einzelspalten-/Einzelzeilenschaltung.
Den Seitenscroll konnte ich leider nicht hinbekommen.

Die label ‚Label1‘ und ‚Label2‘ zeigen den aktuell an der
Leiste eingestellten Wert an. Auf die Labels kann man
natürlich verzichten und den entsprechenden Code weglassen.
Bezeichnungen der Label und der Scrollbars muß du naturlich an
dein Formular anpassen.

’ Initialisieren des Formblatts beim Öffnen
Private Sub UserForm_Initialize()
Dim ScrollSavedV As Integer, ScrollSavedH As Integer
'Initialisierung der vertikalen Bildlaufleiste
ScrollBar1.Min = 4
ScrollBar1.Max = 300
ScrollBar1.Value = ActiveWindow.ScrollRow
Label1.Caption = ScrollBar1.Value
'Initialisierung der horizontalen Bildlaufleiste
ScrollBar2.Min = 2
ScrollBar2.Max = 20
ScrollBar2.Value = ActiveWindow.ScrollColumn
Label2.Caption = Chr$(ScrollBar2.Value + 64)
End Sub

’ Code für vertikale Bildlaufleiste

Private Sub ScrollBar1_Change() ’ Wertänderung bei
Zeilenscroll
Label1.Caption = (ScrollSavedV + ScrollBar1.Value)
ActiveWindow.ScrollRow = ScrollSavedV + ScrollBar1.Value
End Sub

Private Sub ScrollBar1_Scroll() 'Wertänderung mit Schieber
Label1.Caption = (ScrollSavedV + ScrollBar1.Value)
ActiveWindow.ScrollRow = ScrollSavedV + ScrollBar1.Value
End Sub

Private Sub ScrollBar1_Exit(ByVal Cancel As
MSForms.ReturnBoolean)
Label1.Caption = (ScrollSavedV + ScrollBar1.Value)
ScrollSavedV = ScrollBar1.Value
End Sub

’ Code für horizontale Bildlaufleiste

Private Sub ScrollBar2_Change() ’ Wertänderung bei
Spaltenscroll
Label2.Caption = Chr$((ScrollSavedH + ScrollBar2.Value) +
64)
ActiveWindow.ScrollColumn = ScrollSavedH +
ScrollBar2.Value
End Sub

Private Sub ScrollBar2_Scroll() 'Wertänderung mit Schieber
Label2.Caption = Chr$((ScrollSavedH + ScrollBar2.Value) +
64)
ActiveWindow.ScrollColumn = ScrollSavedH +
ScrollBar2.Value
End Sub

Private Sub ScrollBar2_Exit(ByVal Cancel As
MSForms.ReturnBoolean)
Label2.Caption = Chr$((ScrollSavedH + ScrollBar2.Value) +
64)
ScrollSavedH = ScrollBar2.Value
End Sub

Gruß
Franz

Hallo Franz,

oje, den Code verstehe ich nicht so wirklich!

Zunächst: brauche lediglich eine Scrolleiste von oben nach unten.

Die Anzahl der Datenzeilen ist variabel, zur Zeit etwa 1000 (keine Leerzeilen dazwischen). Wenn ich das richtig verstanden habe, dann müßte ich doch zunächst im Userform_Initialze durch eine Schleife die letzte Datenzeile finden und den Wert als Maximum für die Scrollbar setzen?

Und in einem Labelfeld im Formular wird die aktuelle Zeile angezeigt? Könnte man dann nicht mit der Prozedur Label_afterupdate zu der jeweils angezeigten Zeile springen
(durch Cells(Zeile, 1).Select oder so ähnlich)?, dann müßte doch eigentlich der Seitenscroll funktionieren, oder?

Grüße,
Kerstin

Hallo Kerstin!

Und in einem Labelfeld im Formular wird die aktuelle Zeile
angezeigt? Könnte man dann nicht mit der Prozedur
Label_afterupdate zu der jeweils angezeigten Zeile springen
(durch Cells(Zeile, 1).Select oder so ähnlich)?, dann müßte
doch eigentlich der Seitenscroll funktionieren, oder?

Den Seitenscroll kannst Du auch selbst machen:

ActiveWindow.SmallScroll Down:=8

z. B. scrollt das aktive Fenster 8 mal nach unten. Schau mal in der Hilfe nach den weiteren Scroll-Möglichkeiten.

Zur Not immer ganz einfacher Trick: Mit Makro das aufzeichnen, was Du machen willst, und dann in den erzeugten Code schauen. Diesen dann lediglich mit Deinen Variablen anpassen…

Gruß, Manfred

Hallo Kerstin,

Hallo Franz,

oje, den Code verstehe ich nicht so wirklich!

Hatte ja geschrieben, dass ich in der EXCEL-Hilfe fündig geworden bin und hab einfach den Beispiel-Code kopiert und die Zeile zum Einstellen des aktiven Fensters ergänzt.

Zunächst: brauche lediglich eine Scrolleiste von oben nach
unten.

Ich hab den Code jetzt mal vereinfacht und für die vertikale Laufleiste unten eingefügt.

Die Anzahl der Datenzeilen ist variabel, zur Zeit etwa 1000
(keine Leerzeilen dazwischen). Wenn ich das richtig verstanden
habe, dann müßte ich doch zunächst im Userform_Initialze durch
eine Schleife die letzte Datenzeile finden und den Wert als
Maximum für die Scrollbar setzen?

Ja, da du aber in allen Zeilen Werte stehen hast, geht das auch mit einer einfachen Funktion

Und in einem Labelfeld im Formular wird die aktuelle Zeile
angezeigt? Könnte man dann nicht mit der Prozedur
Label_afterupdate zu der jeweils angezeigten Zeile springen
(durch Cells(Zeile, 1).Select oder so ähnlich)?, dann müßte
doch eigentlich der Seitenscroll funktionieren, oder?

Seitenscroll heißt ja, dass die Zeilen um eine Bildschirmhöhe verschoben werden. Dafür habe ich kein auswertbares Ereignis gefunden.
Wenn du direkt eine Zeile anzeigen möchtest, dann kann man das über eine Textbox steuern. Diese Textbox zeigt immer den aktuellen Wert der Scroll-Leiste an, man kann aber auch direkt einen Wert eingeben, um zu einer bestimmten Zeile zu springen. In meinem Beispiel-Code hab ich das mal so umgesetzt.

Grüße,
Kerstin

hier der vereinfachte Code für die vertikale Bildlaufleiste

' Initialisieren des Formblatts beim Öffnen
Private Sub UserForm\_Initialize()
'Initialisierung der Bildlaufleiste
 ScrollBar1.Min = 4
 ScrollBar1.Max = WorksheetFunction.CountA(Range("A:A"))
' In der Spalte (Hier "A") müssen in allen Zeilen Werte stehen.
' CountA entspricht der Funktion ANZAHL2 im Tabellenblatt
' Ggf. Wert anders ermitteln
 ScrollBar1.Value = ActiveWindow.ScrollRow
 TextBox1.Value = ActiveWindow.ScrollRow
End Sub

' Code für vertikale Bildlaufleiste
Private Sub ScrollBar1\_Change()
' Sorgt für Scroll-Effekt im aktiven Fenster, wenn der Wert der
' Scroll-Leiste geändert wird
' Bei Klick auf Pfeile oder Bereich zwischen Pfeil und Schieber wird der
' Wert der Scroll-Leiste jeweils um +1 oder -1 geändert.
' Bei Werteingabe in TextBox1 wird direkt die Zeile angzeigt
 ActiveWindow.ScrollRow = ScrollBar1.Value
 TextBox1.Value = ScrollBar1.Value
End Sub

Private Sub ScrollBar1\_Scroll()
' Sorgt für den Scroll-Effekt im aktiven Fenster, während der Schieber
' der Scroll-Leiste verschoben wird
 ActiveWindow.ScrollRow = ScrollBar1.Value
 TextBox1.Value = ScrollBar1.Value
End Sub

Private Sub TextBox1\_Exit(ByVal Cancel As MSForms.ReturnBoolean)
' Textbox zeigt den Wert von ScrollBar1 an
' Änderung des Wertes scrollt Fenster und paßt ScrollBar an
 Select Case Val(TextBox1.Value)
 Case Is ScrollBar1.Max
 ScrollBar1.Value = ScrollBar1.Max
 Case Else
 ActiveWindow.ScrollRow = Val(TextBox1.Value)
 ScrollBar1.Value = Val(TextBox1.Value)
 End Select
End Sub

Hoffe, dass der Code mit den Kommentaren jetzt verständlicher ist

Gruß
Franz

Hallo Franz,

mit den Erklärungen habe ich den Code jetzt auch verstanden, vielen herzlichen Dank, klappt hervorragend!

Grüße,
Kerstin