ich möchte gerne per VBA modifiziert eine Schnelleingabe des Datums ermöglichen.
Wenn ich eine Zelle in Spalte T oder U anklicke und
"h" eingebe, soll dort das Datum von heute dauerhaft gespeichert werden, also auch, wenn ich die Datei speichere und morgen wieder aufrufe, soll dort das Datum von heute stehen bleiben,
"1" eingebe, soll dort das Datum von heute minus 1, also gestern, dauerhaft gespeichert werden,
"2" eingebe, soll dort das Datum von vorgestern, dauerhaft gespeichert werden,
usw.,
wenn ich ein Datum, z.B. TT.MM.JJ eingebe, soll dieses Datum so gespeichert werden.
in das schon vorhandene VBA-Modul des entsprechenden Tabellenblattes kommt dieser Code:
Code:
Private Sub Worksheet_Change(ByVal Target As Range) With Target.Cells(1) If .Column = 20 Or .Column = 21 Then On Error Resume Next Application.EnableEvents = False Select Case .Value Case "h" .Value = Date Case 1 To 999 .Value = Date - .Value End Select Application.EnableEvents = True On Error GoTo 0 End If End With End Sub
Gruß Uwe
Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:1 Nutzer sagt Danke an Kuwer für diesen Beitrag 28 • Excelbeginner
Uwe hat Dir schon eine Lösung geliefert, zu der ich mal folgenden Senf dazugeben mag: Mit Deinen Eingaben lieferst Du doch eigentlich immer die Differenz zum aktuellen Datum. Warum nimmst Du dann für heute nicht einfach nur die 0?
Fragt sich ...
d`r Bastler von den VBAsteleien.de Win 10 & 11, Office 2019 & 2021 & macOS X.15, XL 2019
...ich hab das "dauerhaft gespeichert" so verstanden, dass ein einmal vorhandenes Datum nicht überschrieben werden darf. Wenn das so ist, dann diesen Code in das Modul der Tabelle:
Code:
Option Explicit
Dim LASTCELL As Range, blnLeer As Boolean, lastDat As Date
Private Sub Worksheet_Change(ByVal Target As Range) If (Target.Column = 20 Or Target.Column = 21) _ And Target.Count = 1 And Target.Address = LASTCELL.Address Then
If blnLeer Then Application.EnableEvents = False If Target.Value = "h" Then Target = Date ElseIf IsNumeric(Target.Value) Then Target.Value = Date - Target.Value ElseIf IsDate(Target.Value) Then Target.Value = Target Else Target = "" End If Else Target = lastDat End If
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Set LASTCELL = ActiveCell: blnLeer = IIf(LASTCELL.Value = "", True, False): lastDat = ActiveCell.Value End Sub
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben. Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.
Ciao, Ralf
Folgende(r) 1 Nutzer sagt Danke an Ralf A für diesen Beitrag:1 Nutzer sagt Danke an Ralf A für diesen Beitrag 28 • Excelbeginner
du hast Recht mit der Null. Nehme aber ein "h" weil das bei anderen Anwendungen bei uns im Haus so hinterlegt ist.
Hallo Kuwer,
habe das in das VBA-Tabellenblatt einkopiert, nicht in ein Modul (richtig?). Funktioniert so, wie ich mir das vorgestellt hatte. Behält er morgen das Datum von heute, oder macht er morgen beim Öffnen das Datum von morgen daraus?
Hallo Ralf A:
Das Datum darf morgen, wenn man es denn ändern will, durchaus geändert werden. Es soll nur nicht (automatisch) das Tagesdatum von morgen dort erscheinen, wenn die Tabelle morgen neu geöffnet wird.
Ich habe Deinen Kode gleichwohl eingefügt (im VBA-Tabellenblatt). Bei "h" wird das heutige Datum eingesetzt, bei Eingabe von "1" schreibt er den 1.1.1900.
Ich denke, die Lösung von Kuwwer passt.
Allerbesten Dank an alle, insbesondere an Kuwer!!! Top!!!