Clever-Excel-Forum

Normale Version: Mit einen Kontrollkästchen einen nicht aktualisierenden Datum setzen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo, mein Name ist Felix und habe ein kleines Problem. ^^´
Ich möchte gerne per Formularsteuerelement (Kontrollkästchen) ein Datum setzen, welches sich nicht ständig aktualisieren soll.
Ich habe mich etwas mit VBA auseinandergesetzt, aber leider ohne Erfolg. 

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
   If Intersect(Target, Range("D1:D10")) Is Nothing Then Exit Sub
   If Target.Count > 1 Then Exit Sub
   If Target = -1 Then
       Target.Offset(0, -1) = CDate(Format(Now, "dd.mm.yyyy"))
   Else
     If Target = 0 Then
       Target.Offset(0, -1).ClearContents
     End If
   End If
End Sub

Hierbei habe ich mich auf die Spalte D1 - D10 beschränkt. Wenn ich manuell WAHR (-1) oder FALSCH (0) eingebe in die Spalte , funktioniert es einwandfrei
und das Datum wird links angezeigt. Mein Problem liegt darin, dass ich es nicht mit ein Formularsteuerelement (Kontrollkästchen) verbinden kann...
Es akzeptiert nicht die WAHR und FALSCH vom Formularsteuerelement (z.B mach ich ein Hacken und die Zeile D3 wird WAHR und mehr passiert auch nicht).
Hoffentlich kann mir jemand hierbei weiterhelfen und gegenfalls kann ich mein Wissenstand auch erweitern.
Bin relativ neu in der Materie, sonst habe ich nie mit Excel gearbeitet ^^´

MfG Felix
Hallo Felix,

bei VBA kann ich zwar nicht helfen, der Wahrheitswert ist aber nicht -1 sondern 1.
(29.07.2019, 23:16)Vartox schrieb: [ -> ]gegenfalls kann ich mein Wissenstand auch erweitern.

Moin Felix!
Ein Formularsteuerelement löst kein Change-Ereignis aus, deshalb funktioniert das auch nicht bei Dir.
Du könntest statt dessen eine ActiveX-Checkbox nehmen und die LinkedCell "unter die Box" legen.

Zu Deinem Code:

If Target.Count > 1 Then Exit Sub
ist überflüssig, denn Du kannst ja immer nur eine Box ändern.

CDate(Format(Now, "dd.mm.yyyy"))
ist von hinten durch die Brust ins Auge, hier reicht Date völlig!

Davon ab:
Das aktuelle Datum schreibe ich einfach mittels Strg+. (Punkt) in die Zelle, dazu brauche ich keinen aufwändigen optischen Schnick-Schnack.

Wenn es dennoch "hübsch" sein soll:
Ich habe hier im Forum mal ein Tutorial geschrieben, welches auf Wingdings beruht:
https://www.clever-excel-forum.de/Thread...mal-anders

Hält die Datei schlank, außerdem muss man die KKs nicht mühselig mit der Maus platzieren.

Gruß Ralf
Hallo Felix, :19:

wenn du bei "Kontrollkästchen" bleiben möchtest, dann so: :21:
[attachment=25691]

Fügst du noch weitere "Kontrollkästchen" hinzu, musst du nur mit der rechten Maustaste auf das Kästchen, dann Makro zuweisen und "Main" auswählen.

Die "Kontrollkästchen" lassen sich auch per Makro erzeugen, platzieren und das Makro zuweisen.
Hallo Felix,

folgendes Makro kommt in ein allgemeines Modul (Einfügen - Modul):
Sub SetzeDatum()
With ActiveSheet.CheckBoxes(Application.Caller)
If .Value = 1 Then
.TopLeftCell.Offset(0, -1).Value = Date
Else
.TopLeftCell.Offset(0, -1) = ""
End If
End With
End Sub
Weise anschließend allen Formular-Kontrolkästchen dann dieses Makro zu.

@Ralf: Ein Formular-Kontrolkästchen kann man auch mit einer Zelle verknüpfen. Wink

Gruß Uwe
Hallo Felix, :19:

in folgendem Beispiel siehst du wie man "Kontrollkästchen" erstellt, benennt, platziert und ein Makro zuweist: :21:
[attachment=25692]

Hast du noch mehrere "Kontrollkästchen" auf dem Tabellenblatt, musst du die Codezeile ".CheckBoxes.Delete" auskommentieren und die darüber liegende Schleife nehmen. LinkedCell kannst du auch zuweisen - sofern du das brauchst. :21: