online 1
gast (50)

/ Forum / Tabellenkalkulation

TabellenkalkulationTabellenkalkulation

Fragevon LIPO vom 24.09.2019, 11:26 Options

In Zelle des aktuellen Datums springen

Hallo,
ich hoffe, mir kann jemand helfen.
Ich habe eine Exceltabelle mit 4 Blättern (1.Quartal, 2.Quartal, 3.Quartal, 4.Quartal).
Ich möchte nun, dass beim Öffnen der Datei der Cursor automatisch in die Zelle des aktuellen Datums springt.
Die einzelnen Tabellenblätter haben alle den gleichen Aufbau: In Spalte A sind von A2 bis A366 die Datumswerte angegeben. Da ich ja möchte, dass der Cursor das Datum auch auf dem richtigen Tabellenblatt anspringt, habe ich die Datumswerte der einzelnen Quartale händisch eingegeben und die anderen auf dem gleichen Blatt als Formel, da ich so etwas ähnliches schon einmal gemacht habe und Excel die Datumswerte mit Formel ja nicht als solche erkennt (was hier ausnahmsweise von Vorteil ist).
Habe nun folgendes versucht:
Private Sub Workbook_Open()
Dim suche As Range
Set suche = Sheets(1).Range("A2:A366").Find(CDate(Date), LookIn:=xlFormulas)
If Not suche Is Nothing Then
Sheets(1).Cells(suche.Row, suche.Column).Select

End If
End Sub

Leider funktioniert das nicht mit dem Wechsel zwischen den Tabellenblättern. Und da auf dem ersten Tabellenblaat der 24.9. durch Formel eingegeben ist, springt er da auch nicht hin (was aber gewollt ist. Wie bringe ich VBA nun aber bei, dass er in jedem Arbeitsblatt in Spalte A suchen soll?
Vielen Dank im Voraus!!!


Antwort schreiben

Antwort 1 von lleopard vom 24.09.2019, 11:57 Options

Hi Lipo

probiers doch mal so:

Function Datumssuche()
Dim i As Integer
Dim var, cc As Long

cc = Me.Sheets.Count


var = Me.ActiveSheet.Name

For Each Sheet In Me.Sheets
For i = 2 To 366
If Cells(1, i) = Date Then

MsgBox "Tabellen gefunden: " & cc & vbCrLf & _
"Tabellenname: " & var & vbCrLf & _
"Zeile mit akt Datum: " & "Zelle A" & i
End If
Next i
i = 2
Next Sheet

End Function


durchläufst einfach alle Tabellenblätter in der aktiven Tabelle und suchst nach dem Eintrag in Zeile A.

Gruß leo

Antwort 2 von rainberg vom 24.09.2019, 11:58 Options

Hallo,

probier's mal so

Option Explicit

Private Sub Workbook_Open()
   Dim intI As Integer
   Dim rngC As Range
   For intI = 1 To 4
      For Each rngC In Worksheets(intI).Range("A1:A100")
         If rngC.Value = Date Then
            Worksheets(intI).Select
            Cells(rngC.Row, 1).Select
         End If
      Next
   Next
End Sub

Antwort 3 von LIPO vom 24.09.2019, 13:19 Options

@ Rainberg
Hallo Rainberg,
vielen Dank. Vom Prinzip her funktioniert's!!! Allerdings markiert er in jeder einzelnen Tabelle das Datum und springt zum Tabellenblatt 4. Quartal. Eigentlich dürfte er aber nur das Datum im 3. Quartal markieren, da heute der 24.9. ist und dieses Datum zum 4. Quartal gehört. Ich hatte immer nur die Datumswerte per Hand eingegeben, die in diesem Wuartal liegen. Alle anderen habe ich mit Hilfe von Formeln eingegeben. Wäre super, wenn ich da nochmal Hilfe bekommen könnet!
Aber trotzdem: VIELEN DANK FÜR DIE SUPER SCHNELLE ANTWORT!!!!

@Ileopard
Hallo Ileopard,
auch hier möchte ich mich für die super schnelle Antwort bedanken! Leider funktioniert's so bei mir nicht. Habe alles so übernommen doch leider passiert gar nichts!
Trotzdem: VIELEN DANK FÜR DIE SUPER SCHNELLE ANTWORT!!!!!!

Antwort 4 von lleopard vom 24.09.2019, 13:22 Options

hi LIPO

klar, mußt ja auch Workbook_Open aktivieren, damit ers beim öffnen macht... ;-)

Gruß leo

PS: Die Lösung von Rainberg finde ich aber auch gut! Allerdings fehlt der ausstieg aus der Routine, wenn er das richtige Feld gefunden hat. Da reicht ein exit sub

Antwort 5 von LIPO vom 24.09.2019, 13:54 Options

Hallo Leo,
ich bin begeistert wie schnell das hier geht!!!! :-)
Da ich nicht gerade die fitteste Person im Umgang mit VBA bin, habe ich Dein Code in "Diese Arbeitsmappe" kopiert. Da hat's nicht funktioniert. Dann habe ich's in Workbook_Open kopiert
Private Sub Workbook_Open()
Dim i As Integer
Dim var, cc As Long

cc = Me.Sheets.Count


var = Me.ActiveSheet.Name

For Each Sheet In Me.Sheets
For i = 2 To 366
If Cells(1, i) = Date Then

MsgBox "Tabellen gefunden: " & cc & vbCrLf & _
"Tabellenname: " & var & vbCrLf & _
"Zeile mit akt Datum: " & "Zelle A" & i
End If
Next i
i = 2
Next Sheet
End Sub

Da bringt er mir nun "Laufzeitfehler 1004". Hm, was mache ich falsch??? :-)

Im Prinzip würde die Lösung von Rainberg ja langen, aber er soll halt das Datum auch im richtigen Quartalsblatt markieren bzw. dort hin springen.
Hast Du da noch einen Vorschlag? Habe am Ende Exit Sub eingegeben, da bringt er mir aber wieder ein Fehler.
Gruß

Antwort 6 von lleopard vom 24.09.2019, 14:07 Options

Hallo Lipo,

also die Lösung von Rainberg mußt du so ergänzen

Option Explicit

Private Sub Workbook_Open()
Dim intI As Integer
Dim rngC As Range
For intI = 1 To 4 'Durchläuft nur die 4 Quartale!

For Each rngC In Worksheets(intI).Range("A1:A100")

If rngC.Value = Date Then

Worksheets(intI).Select 'Arbeitsblatt aktivieren per select
Cells(rngC.Row, 1).Select 'Zelle aktivieren per select

Exit Sub '<= UND HIER der Ausstieg!!

End If

Next

Next
End Sub

Gruß Leo

Antwort 7 von LIPO vom 24.09.2019, 14:58 Options

VIELEN DANK FÜR DIE HILFE!!!

Antwort 8 von rainberg vom 24.09.2019, 15:22 Options

Hallo LIPO,

mein Makro markiert das richtige Datum in der richtigen Tabelle.

Wenn das bei Dir nicht so ist, hast Du mehr als 4 Tabellen im Register liegen.

Auf die Abfrage der Tabellennamen habe ich bewusst verzichtet, da Du ausdrücklich schriebst.....


Zitat:
Ich habe eine Exceltabelle mit 4 Blättern (1.Quartal, 2.Quartal, 3.Quartal, 4.Quartal)


Gruß
Rainer

Antwort 9 von LIPO vom 25.09.2019, 07:17 Options

Hallo Rainberg,
ich habe es gestern Abend dann noch hin bekommen!!! Vielen Dank nochmal!!!! Hat mir sehr geholfen!!!!
Schönen Tag noch!
Gruß
LIPO

Antwort 10 von rainberg vom 25.09.2019, 07:57 Options

Hallo LIPO,

freut mich, dass es klappt.

Falls es Dich noch interessiert, habe das Makro etwas optimiert.

Option Explicit

Private Sub Workbook_Open()
   Dim intI As Integer
   Dim rngC As Range
   For intI = 1 To 4
      For Each rngC In Worksheets(intI) _
      .Range("A1:A" & Range("A65536").End(xlUp).Row)
         If rngC.Value = Date Then
            Worksheets(intI).Select
            Cells(rngC.Row, 1).Select
            Exit Sub
         End If
      Next
   Next
End Sub


Gruß
Rainer

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Mon Jan 26 01:23:17 2026