Zu definierter Zelle scrollen/springen

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

▲ nach oben …

Reference: #5874

Dieser Beitrag wurde unter Code-Schnipsel, Tabelle und Zelle abgelegt und mit , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

2 Antworten zu Zu definierter Zelle scrollen/springen

  1. ahapezet sagt:

    Hallo Admin.
    Ich habe mir erlaubt Ihr Makro SprungZurZelle in eine meiner EXCEL 2003 Dateien in das entsprechende Arbeitsblatt zu kopieren. Bei der Anwendung kommt jedoch nur eine Meldung: Objektvariable oder With-Blockvariable nicht festgelegt.
    Da meine VBA Kentnisse sehr gering sind, kann ich den Fehler nicht beheben. Was muss an dem Code geändert werden?
    MfG. Peter

    • Admin sagt:

      Hallo Peter,
      erst einmal mein Dankeschön für die Nachfrage. Prognosen ohne die Datei, wo der Fehler auftritt vor sich zu haben, sind schwierig; ich denke, dass im Bereich A1:A400 des aktiven Blattes entweder keine kalendarischen Daten stehen oder das entsprechende gesuchte Datum nicht gefunden wurde. Das führt auf jeden Fall zu dieser Meldung.
      Zugegeben, die Fehlermeldung ist in diesem Fall nicht gerade passend und aus meiner Sicht weder eine Hilfe noch zielführend. Aber damit müssen wir VBA-Programmierer leben …

      Ich hatte in den Code keine Fehler-Behandlung eingebaut, weil ich beim Erstellen des Codes die Verantwortung in erster Linie beim Ersteller sehe, dass er/sie haarklein überprüft, ob die Gegebenheiten OK sind. Wenn allerdings ein User durch seine Aktionen ungewollt Veränderungen vornehmen kann, die zu Laufzeit-Fehlern führen können, dann ist eine Fehlerbehandlung erforderlich. – Ich habe hier einmal eine solche eingebaut, hier der (neue) Code:

      Option Explicit
      
      Sub SprungZuZelle_2()
         Dim rng As Range, Ziel As Range, Zeile As Long, Spalte As Long, Datum As Date
         Set rng = Range("A1:A400")
         Datum = DateSerial(Year(Date), Month(Date), 1)
         If WorksheetFunction.CountIf(rng, Datum) > 0 Then
            Set Ziel = rng.Find(DateSerial(Year(Date), Month(Date), 1))
            Zeile = Ziel.Row
            Spalte = 1
            With ActiveWindow
               .ScrollColumn = Spalte
               .ScrollRow = Zeile
            End With
            Exit Sub
         End If
         MsgBox "Das Datum konnte im Bereich  " & rng.Address(0, 0) & "  nicht gefunden werden!", _
            vbCritical, "Bereichs-Fehler"
      End Sub

      Ich hoffe, dass damit der Fehler „erschlagen“ ist. Der Transparenz wegen habe ich noch einige andere Kleinigkeiten geändert, auch wenn es dadurch einige Zeilen mehr werden.

      Beste Grüße
      Günther

Schreibe einen Kommentar