Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Datumschnelleingabe per VBA
#1
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
Antworten Top
#2
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
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • Excelbeginner
Antworten Top
#3
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 ...

d`r Bastler von den VBAsteleien.de
Win 10 & 11, Office 2019 & 2021 & macOS X.15, XL 2019
[-] Folgende(r) 1 Nutzer sagt Danke an d'r Bastler für diesen Beitrag:
  • Excelbeginner
Antworten Top
#4
...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
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:
  • Excelbeginner
Antworten Top
#5
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
Antworten Top
#6
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
Antworten Top
#7
Ich möchte ein SpinButton vorschlagen:


Angehängte Dateien
.xlsb   __spinbutton.xlsb (Größe: 16,31 KB / Downloads: 3)
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste