Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Optionsfeld in Zellenwert übertragen

Forumthread: Optionsfeld in Zellenwert übertragen

Optionsfeld in Zellenwert übertragen
24.05.2017 14:58:03
Franzi
Hallo,
es soll abgefragt werden, ob eine tägliche Aufgabe schon erfüllt wurde. Dazu sollen zwei Optionen (nein und ja) und das aktuelle Datum angeboten werden. Standardmäßig ist die Option nein aktiviert.
Der Status soll in einem zweiten Tabellenblatt mit Datum und Status ja/nein dokumentiert werden. Die Optionbutton-Bedienung soll reversibel sein, wenn also auf nein zurückgeschaltet wird (z.B. weil eine noch nicht erledigte Unteraufgabe auffiel), soll auch der Eintrag in der Dokumentationstabelle auf nein aktualisiert werden.
Die Abfrage soll in einem Textfeld stattfinden, das dynamisch verschoben wird (bereits vorhanden).
Ich brauche Hilfe für den VBA-Code,
  • mit dem der Status der Knöpfe (ActiveX-Optionsfeld richtig?) reversibel in die Dokumentationstabelle übertragen wird,

  • und mit dem der Status mit dem richtigen Datum verknüpft wird. Vielleicht sollte in der Dokumentationstabelle schon eine vollständige Datumsliste vorgehalten werden und der Code nur das richtige Datum aufsuchen?

  • Über Anregungen würde ich mich sehr freuen!
    Danke im Voraus
    Franzi
    Anzeige

    5
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: Optionsfeld in Zellenwert übertragen
    24.05.2017 15:51:06
    Matthias
    Hallo Franzi,
    eine Möglichkeit ist die Benutzung einer CheckBox
    In den Eigenschaften kannst Du dann eine Zelladresse bei LinkedCell eintragen.
    z.B. Tabelle1!B1
    Wenn Du das Häkchen setzt wird in der Zelle WAHR ausgegeben beim Entfernen FALSCH
    Dies lässt sich ja dann einfach auswerten.
    Nur so als Idee
    Gruß Matthias
    Anzeige
    AW: Optionsfeld in Zellenwert übertragen
    26.05.2017 14:27:54
    Franzi
    Hallo Matthias,
    danke für den Hinweis. Leider akzeptiert LinkedCell keine komplexen Verweise, z.B. mit einem SVERWEIS. Ich versuche es jetzt mit einer Formularsteuerelement-Checkbox, deren Wert ich in VBA auslesen und in die Zelle neben dem Datum von heute eintragen möchte. Da ist wohl VLOOKUP das Richtige?
    Franzi
    Anzeige
    AW: Optionsfeld in Zellenwert übertragen
    29.05.2017 18:31:30
    Peter
    Hallo Franzi,
    mit dem Optionsfeld und der Check-Box habe ich es mal probiert; die Ergebnisse waren jedoch nicht zufriedenstellend, weil der Status des ausgewählten Auftrags keine Auswirkung auf die Anzeige der Optionsfelder bzw. der Check-Box hat. Ich habe daher zwei einfache Makro-Buttons eingesetzt. Durch den S-Verweis wird Dir in der Tabelle1 der jeweils gegenwärtige Status (lt. Tabelle2) angezeigt und Du kannst dann den entsprechenden Button anklicken. Wenn man den Button für den gegenwärtigen Status anklickt, passiert gar nichts, es wird nur die Tabelle2 eingeblendet.
    Hier meine Datei:
    https://www.herber.de/bbs/user/113873.xlsm
    Bitte mal ausprobieren. Feedback wäre schön.
    Mit freundlichem Gruß
    Peter Kloßek
    Anzeige
    AW: Optionsfeld in Zellenwert übertragen
    30.05.2017 11:10:43
    Franzi
    Hallo Peter,
    vielen Dank für die Ausarbeitung, das sieht gut aus! Ich versuche, es zu übertragen.
    LG F.
    AW: Optionsfeld in Zellenwert übertragen
    02.06.2017 16:45:06
    Franzi
    Hallo,
    ich habe nun folgende Lösung gewählt:
    a) die Haupttabelle enthält eine ActiveX-Checkbox CheckBox1 mit der Frage "Aufgabe erledigt?"
    b) Es gibt ein zusätzliches Tabellenblatt mit zwei Spalten: Datum (für die nächsten Monate bis Jahre) und "Aufgabe erledigt?", hinter jedem Datum steht nein.
    c) Durch das Anklicken der Checkbox wird in dem zusätzlichen Tabellenblatt das Datum des heutigen Tages aufgesucht und daneben "ja" eingetragen. Abklicken führt zum Gegenteil.
    Private Sub CheckBox1_Click()
    Dim heutigesdatum As Date
    Dim Rng As Range
    heutigesdatum = CLng(Date)
    ' Bei Anklicken der CheckBox1 Eintrag "ja" generieren.
    If CheckBox1.Value = True Then
    With Sheets("Dokumentation").Range("A:A")
    Set Rng = .Find(What:=heutigesdatum, _
    After:=.Cells(.Cells.Count), _
    LookIn:=xlFormulas, _
    LookAt:=xlWhole, _
    SearchOrder:=xlByRows, _
    SearchDirection:=xlNext)
    If Not Rng Is Nothing Then
    Rng.Offset(0, 1).Value = "ja"
    Else
    MsgBox "Das heutige Datum ist noch nicht in der Dokumentationstabelle aufgeführt."
    End If
    End With
    End If
    ' Bei Abklicken der CheckBox1 Eintrag "nein" generieren.
    If CheckBox1.Value = False Then
    With Sheets("Dokumentation").Range("A:A")
    Set Rng = .Find(What:=heutigesdatum, _
    After:=.Cells(.Cells.Count), _
    LookIn:=xlFormulas, _
    LookAt:=xlWhole, _
    SearchOrder:=xlByRows, _
    SearchDirection:=xlNext)
    If Not Rng Is Nothing Then
    Rng.Offset(0, 1).Value = "nein"
    Else
    MsgBox "Das heutige Datum ist noch nicht in der Dokumentationstabelle aufgeführt."
    End If
    End With
    End If
    End Sub
    
    d) jeweils beim ersten Öffnen der Datei an einem Tag muss sichergestellt sein, dass der Haken in der Checkbox nicht fälschlicherweise gesetzt ist. Dies macht eine Abfrage unter Workbook_open()
    
    Private Sub Workbook_Open()
    Dim heutigesdatum As Date
    Dim Rng As Range
    heutigesdatum = CLng(Date)
    With Sheets("Dokumentation").Range("A:A")
    Set Rng = .Find(What:=heutigesdatum, _
    After:=.Cells(.Cells.Count), _
    LookIn:=xlFormulas, _
    LookAt:=xlWhole, _
    SearchOrder:=xlByRows, _
    SearchDirection:=xlNext)
    If Rng.Offset(0, 1).Value = "nein" Then
    Worksheets("Arbeitsliste").CheckBox1.Value = False
    End If
    End With
    
    Danke für alle Hilfe!
    LG F.
    Anzeige
    ;
    Anzeige
    Anzeige

    Infobox / Tutorial

    Optionsfeld in Zellenwert übertragen


    Schritt-für-Schritt-Anleitung

    1. Erstelle ein neues Excel-Dokument und füge ein neues Tabellenblatt namens „Dokumentation“ hinzu.

    2. Füge eine ActiveX-Checkbox (CheckBox1) zu deinem Hauptarbeitsblatt hinzu. Klicke dazu in der Entwicklertools-Leiste auf „Einfügen“ und wähle die Checkbox aus.

    3. Verknüpfe die Checkbox mit dem VBA-Code. Klicke mit der rechten Maustaste auf die Checkbox und wähle „Code anzeigen“. Füge den folgenden VBA-Code ein:

      Private Sub CheckBox1_Click()
         Dim heutigesdatum As Date
         Dim Rng As Range
         heutigesdatum = CLng(Date)
         ' Bei Anklicken der CheckBox1 Eintrag "ja" generieren.
         If CheckBox1.Value = True Then
             With Sheets("Dokumentation").Range("A:A")
                 Set Rng = .Find(What:=heutigesdatum, _
                 After:=.Cells(.Cells.Count), _
                 LookIn:=xlFormulas, _
                 LookAt:=xlWhole, _
                 SearchOrder:=xlByRows, _
                 SearchDirection:=xlNext)
                 If Not Rng Is Nothing Then
                     Rng.Offset(0, 1).Value = "ja"
                 Else
                     MsgBox "Das heutige Datum ist noch nicht in der Dokumentationstabelle aufgeführt."
                 End If
             End With
         End If
         ' Bei Abklicken der CheckBox1 Eintrag "nein" generieren.
         If CheckBox1.Value = False Then
             With Sheets("Dokumentation").Range("A:A")
                 Set Rng = .Find(What:=heutigesdatum, _
                 After:=.Cells(.Cells.Count), _
                 LookIn:=xlFormulas, _
                 LookAt:=xlWhole, _
                 SearchOrder:=xlByRows, _
                 SearchDirection:=xlNext)
                 If Not Rng Is Nothing Then
                     Rng.Offset(0, 1).Value = "nein"
                 Else
                     MsgBox "Das heutige Datum ist noch nicht in der Dokumentationstabelle aufgeführt."
                 End If
             End With
         End If
      End Sub
    4. Füge eine Abfrage beim Öffnen der Datei hinzu, um den Status der Checkbox zurückzusetzen:

      Private Sub Workbook_Open()
         Dim heutigesdatum As Date
         Dim Rng As Range
         heutigesdatum = CLng(Date)
         With Sheets("Dokumentation").Range("A:A")
             Set Rng = .Find(What:=heutigesdatum, _
             After:=.Cells(.Cells.Count), _
             LookIn:=xlFormulas, _
             LookAt:=xlWhole, _
             SearchOrder:=xlByRows, _
             SearchDirection:=xlNext)
             If Rng.Offset(0, 1).Value = "nein" Then
                 Worksheets("Arbeitsliste").CheckBox1.Value = False
             End If
         End With
      End Sub
    5. Teste dein Setup. Klicke die Checkbox an und beobachte, wie der Status in der Dokumentationstabelle aktualisiert wird.


    Häufige Fehler und Lösungen

    • Fehler: Checkbox aktualisiert nicht den Status.

      • Lösung: Stelle sicher, dass der VBA-Code korrekt in das richtige Ereignis (CheckBox1_Click) eingefügt wurde.
    • Fehler: Datum nicht gefunden.

      • Lösung: Überprüfe, ob das heutige Datum in der Dokumentationstabelle vorhanden ist. Du kannst die Liste der Daten manuell hinzufügen.

    Alternative Methoden

    Eine Alternative zu den ActiveX-Checkboxen ist die Verwendung von Formularsteuerelementen. Diese können einfacher zu verwalten sein und bieten ähnliche Funktionalitäten. Du kannst auch Makro-Buttons verwenden, um die Statusänderungen durch einen Klick auszulösen, anstatt die Checkboxen zu verwenden.


    Praktische Beispiele

    Ein praktisches Beispiel könnte sein, eine Aufgabenliste zu erstellen, in der du den Status von täglichen Aufgaben mit einem Optionsfeld erfassen kannst. Du kannst auch eine Erledigt/Noch zu erledigen-Funktionalität implementieren, indem du eine zweite Checkbox für „nein“ hinzufügst.


    Tipps für Profis

    • Nutze VBA-Fehlerbehandlung: Implementiere On Error Resume Next im Code, um Laufzeitfehler elegant abzufangen.
    • Verwende Option Explicit: Durch diese Anweisung am Anfang deines Codes kannst du sicherstellen, dass alle Variablen deklariert werden, was die Fehlersuche erleichtert.
    • Optimierung der Datenbank: Halte deine Dokumentationstabelle sauber und strukturiert, um die Suche nach Daten zu optimieren.

    FAQ: Häufige Fragen

    1. Wie kann ich mehrere Optionsfelder in einer Gruppe verwenden?
    Du kannst die Optionsfelder gruppieren, indem du sie in ein Frame-Steuerelement einfügst. So wird sichergestellt, dass immer nur eine Option ausgewählt sein kann.

    2. Kann ich das Datum automatisch eintragen lassen?
    Ja, du kannst das heutige Datum automatisch in eine benachbarte Zelle eintragen, wenn die Checkbox aktiviert wird. Füge einfach eine Zeile in deinen VBA-Code ein, um das Datum zu setzen.

    3. Was ist der Unterschied zwischen ActiveX- und Formularsteuerelementen?
    ActiveX-Elemente bieten mehr Flexibilität und Programmiermöglichkeiten, während Formularsteuerelemente einfacher zu handhaben sind und weniger Ressourcen benötigen.

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Entdecke mehr
    Finde genau, was du suchst

    Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

    Suche nach den besten Antworten
    Unsere beliebtesten Threads

    Entdecke unsere meistgeklickten Beiträge in der Google Suche

    Top 100 Threads jetzt ansehen
    Anzeige