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