Clever-Excel-Forum

Normale Version: Datumschnelleingabe per VBA
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Excelperten,

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.

Kann mir jemand helfen?

Vielen Dank im Voraus

Excelbeginner
Hallo,

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
Moin xbegin, 

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 ...
...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

    Target.NumberFormat = "dd/mm/yyyy"
    Application.EnableEvents = True

End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   Set LASTCELL = ActiveCell: blnLeer = IIf(LASTCELL.Value = "", True, False): lastDat = ActiveCell.Value
End Sub
Hallo,

(17.09.2022, 16:37)d'r Bastler schrieb: [ -> ]Warum nimmst Du dann für heute nicht einfach nur die 0?

das wäre mit
Case 0 To 999
auch mit abgedeckt.

Gruß Uwe
Hallo d'r Bastler,

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!!!

Excelbeginner
Ich möchte ein SpinButton vorschlagen: