In einer Tabelle sind in Spalte A kalendarische Daten des Jahres aufgeführt, also beginnend am 1. Januar bis zum 31. Dezember des laufenden Jahres. Der Wunsch, die Forderung: Beim Klick auf eine Schaltfläche oder beim Aktivieren des Tabellenblatts soll immer der Erste des aktuellen Monats in der zweitobersten sichtbaren obersten Zeile stehen. Die Oberste Zeile ist stets die fixierte Zeile 1 mit den Überschriften. Folgender Code führt bei Klick auf den entsprechenden Button zum Ziel:
Sub SprungZuZelle() Dim Ziel As Range, Zeile As Long, Spalte As Long Set Ziel = Range("A1:A400").Find(DateSerial(Year(Date), Month(Date), 1)) Zeile = Ziel.Row Spalte = 1 With ActiveWindow .ScrollColumn = Spalte .ScrollRow = Zeile End With End Sub
Soll das bei Aktivierung des Blattes geschehen, dann muss die erste Zeile natürlich anders aussehen:
Sub WorkSheet_Activate()
Der Rest ist wie oben gezeigt. Der Code gehört in beiden Fällen in das Modul der entsprechenden Mappe. Beim aktivieren wird die Mappe automatisch zum Monatsersten scrollen.
Nachtrag: Natürlich ist es auch möglich, zu einer definierten Zelle zu springen und den Bildschirm „von alleine” dorthin scrollen zu lassen. Beispielsweise …
Sub ScrollToXY() Dim Adresse As String 'Gehe zu Adresse Application.Goto Reference:=Range("C138"), scroll:=True 'Gehe zu Bereichsname Application.Goto Reference:=Range("ZielAdresse"), scroll:=True 'Aus Zelle lesen, Adresse steht in A1,hier: 'C138 Adresse = Cells(1, 1) Application.Goto Reference:=Range(Adresse), scroll:=True End Sub