Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA: CheckBox (Ja/Nein) statt (Wahr/Falsch)

VBA: CheckBox (Ja/Nein) statt (Wahr/Falsch)
14.10.2019 05:40:30
Charly
Guten Morgen,
wer kann mir Erklären wie Ich CheckBoxen in meinem Code Verwenden kann mit Rückgabe Wert (Ja/Nein) statt (Wahr/Falsch).
Ich habe in meiner UF die besagten CheckBoxen, nun möchte ich
1. den Wert in meine UF einlesen aus Mappe(1)
2. dann möchte Ich den Engelesen Wert in Mappe(2) Schreiben
Danke im Voraus für jegliche Hilfe
Gruß Charly
Hier Mien Code zum Suchen:

Sub ID_Suchen()
' Suche alle Werte die per ID in der UF (UF1_Eingabe) ausgewählt wurde.
Dim strSuch As String, raFund As Range, sh As Worksheet
Set sh = Worksheets("RO")
strSuch = UF1_Eingabe.CB_ID
With sh
Set raFund = .Columns(3).Find(what:=strSuch, LookIn:=xlValues, lookat:=xlWhole)
If Not raFund Is Nothing Then
UF1_Eingabe.CB_WB = raFund.Offset(, 2)
UF1_Eingabe.CB_Zi = raFund.Offset(, 4)
UF1_Eingabe.CB_Name = raFund.Offset(, 6)
UF1_Eingabe.TB_Geb = raFund.Offset(, 7)
UF1_Eingabe.TB_Aufge = raFund.Offset(, 9)
UF1_Eingabe.TB_GeDate1 = raFund.Offset(, 18)
UF1_Eingabe.CB_Kasse = raFund.Offset(, 11)
UF1_Eingabe.CB_Privat = raFund.Offset(, 12)
UF1_Eingabe.CB_Ärzt = raFund.Offset(, 14)
UF1_Eingabe.TB_Date1 = raFund.Offset(, 16)
UF1_Eingabe.CB_Lieferand = raFund.Offset(, 22)
UF1_Eingabe.TB_LData = raFund.Offset(, 24)
UF1_Eingabe.CB_Herst = raFund.Offset(, 26)
UF1_Eingabe.CB_Model = raFund.Offset(, 28)
UF1_Eingabe.TB_Stre = raFund.Offset(, 30)
UF1_Eingabe.TB_SN = raFund.Offset(, 32)
UF1_Eingabe.TB_Reg = raFund.Offset(, 34)
UF1_Eingabe.TB_Reh = raFund.Offset(, 36)
' >>>> Hier sind meine CheckBoxen
UF1_Eingabe.ChB_Korb = raFund.Offset(, 40)
UF1_Eingabe.ChB_Tischauflage = raFund.Offset(, 41)
UF1_Eingabe.CB_CE = raFund.Offset(, 45)
UF1_Eingabe.TB_Bauja = raFund.Offset(, 47)
UF1_Eingabe.TB_GeDate2 = raFund.Offset(, 57)
UF1_Eingabe.CB_änGrund = raFund.Offset(, 59)
UF1_Eingabe.TB_Bemerkung = raFund.Offset(, 61)
End If
End With
Set raFund = Nothing
End Sub

Hier Mien Code zum Schreiben:

Sub Schreiben()
' Schreibe ins Tabellenblatt >> HM2030_RO, Tab: "RO"
Dim sh As Worksheet, n As Long, Ereignis As String
Set sh = ThisWorkbook.Sheets("RO")
n = Application.Match(VBA.CLng(UF1_Eingabe.CB_ID.Value), sh.Range("C:C"), 0)
sh.Unprotect "1234"
sh.Range("L" & n).Value = UF1_Eingabe.TB_Aufge.Value
sh.Range("E" & n).Value = UF1_Eingabe.CB_WB.Value
sh.Range("G" & n).Value = UF1_Eingabe.CB_Zi.Value
sh.Range("I" & n).Value = UF1_Eingabe.CB_Name.Value
sh.Range("J" & n).Value = UF1_Eingabe.TB_Geb.Value
sh.Range("Q" & n).Value = UF1_Eingabe.CB_Ärzt.Value
sh.Range("S" & n).Value = UF1_Eingabe.TB_Date1.Value
sh.Range("N" & n).Value = UF1_Eingabe.CB_Kasse.Value
sh.Range("O" & n).Value = UF1_Eingabe.CB_Privat.Value
sh.Range("U" & n).Value = UF1_Eingabe.TB_GeDate1.Value
sh.Range("Y" & n).Value = UF1_Eingabe.CB_Lieferand.Value
sh.Range("AA" & n).Value = UF1_Eingabe.TB_LData.Value
sh.Range("AC" & n).Value = UF1_Eingabe.CB_Herst.Value
sh.Range("AE" & n).Value = UF1_Eingabe.CB_Model.Value
sh.Range("AG" & n).Value = UF1_Eingabe.TB_Stre.Value
sh.Range("AI" & n).Value = UF1_Eingabe.TB_SN.Value
sh.Range("AK" & n).Value = UF1_Eingabe.TB_Reg.Value
sh.Range("AM" & n).Value = UF1_Eingabe.TB_Reh.Value
sh.Range("AV" & n).Value = UF1_Eingabe.CB_CE.Value
' >>>> Hier sind meine CheckBoxen, aktuell mit Rückgabe Wert (Wahr/Falsch)
sh.Range("AX" & n).Value = UF1_Eingabe.TB_Bauja.Value
sh.Range("AQ" & n).Value = UF1_Eingabe.ChB_Korb.Value
sh.Range("AR" & n).Value = UF1_Eingabe.ChB_Tischauflage.Value
sh.Range("BH" & n).Value = UF1_Eingabe.TB_GeDate2.Value
sh.Range("BJ" & n).Value = UF1_Eingabe.CB_änGrund.Value
sh.Range("BL" & n).Value = UF1_Eingabe.TB_Bemerkung.Value
sh.Protect "1234"
' UF-Inhalte werden zurückgesetzt
Call M_UF1.Inhalt_Löschen
' Nachricht
MsgBox "Eingabe wurde Übernommen", vbInformation
End Sub

Anzeige

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

Betreff
Datum
Anwender
Anzeige
Der Spur nach …
14.10.2019 06:03:39
RPP63
Moin!
Anpassen darfst Du selbst:
Range("A1") = IIf(CheckBox1, "Ja", "Nein")
Gruß Ralf
AW: Der Spur nach …
14.10.2019 08:06:55
Charly
Morgen Ralf,
hab dein Bsp. in meinen Code eingefügt, funktioniert Super.
Wenn Ich jetzt aber Werte in meiner UF ändern möchte (Die Werte der CheckBoxen bleiben Unberührt!)
Erschein eine Fehlermeldung "Laufzeitfehler 94" Unzulässige Verwendung von Null, im Code würd mir die erste CheckBox gelb Markiert.
Anmerkung:
In der UF wenn Ich alle Werte Suchen lassen sind die CheckBoxen mit Hächen grau hinterlegt, wenn man Sie anklickt sind Sie nicht mehr grau Hinterlegt.
Hier mein Code der CheckBoxen:

sh.Range("AQ" & n).Value = IIf(UF1_Eingabe.ChB_Korb, "Ja", "Nein")
sh.Range("AR" & n).Value = IIf(UF1_Eingabe.ChB_Tischauflage, "Ja", "Nein")
Gruß Charly
Anzeige
AW: Der Spur nach …
14.10.2019 09:52:38
Daniel
Hi
die Checkboxen können drei verschiedene Zustände haben, dh WAHR, FALSCH und "noch nicht angegeben"
und ich vermute mal, dass diesen dritten Zustand das IIF nicht auflösen kann.
probiere mal, ob es mit ... = IIF(Checkbox1.Value = True, "Ja", "Nein") ohne Fehler läuft.
Gruß Daniel
Anzeige
AW: Der Spur nach …
14.10.2019 10:20:20
Nepumuk
Hallo,
das geht auch nicht mit Value. Den NULL-Wert muss man extra abfangen.
    If Not IsNull(ChB_Korb.Value) Then _
sh.Range("AQ" & n).Value = IIf(ChB_Korb.Value, "Ja", "Nein")

Gruß
Nepumuk
AW: Der Spur nach …
14.10.2019 10:51:11
Charly
Hallo Daniel u. Nepumuk,
eure beiden Bsp. funktionieren Super.
Ebenso läst sich die UF bearbeiten, keine Fehlermeldungen mehr.
Gruß Charly
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA: CheckBox (Ja/Nein) statt (Wahr/Falsch)


Schritt-für-Schritt-Anleitung

Um in Excel VBA eine CheckBox so zu verwenden, dass sie anstelle von "Wahr" und "Falsch" die Werte "Ja" und "Nein" zurückgibt, kannst Du die folgenden Schritte befolgen:

  1. CheckBoxen in der UserForm einfügen: Stelle sicher, dass Du die CheckBoxen in Deiner UserForm (UF) hast.

  2. Werte aus der ersten Arbeitsmappe einlesen: Verwende den folgenden Code, um den Wert der CheckBox in Deine UserForm zu laden:

    UF1_Eingabe.ChB_Korb.Value = IIf(raFund.Offset(, 40).Value = "Ja", True, False)
  3. Werte in die zweite Arbeitsmappe schreiben: Um die Werte zu speichern, nutze den folgenden Code:

    sh.Range("AQ" & n).Value = IIf(UF1_Eingabe.ChB_Korb.Value, "Ja", "Nein")
    sh.Range("AR" & n).Value = IIf(UF1_Eingabe.ChB_Tischauflage.Value, "Ja", "Nein")
  4. NULL-Werte abfangen: Achte darauf, dass Du NULL-Werte abfängst, um Laufzeitfehler zu vermeiden. Beispiel:

    If Not IsNull(UF1_Eingabe.ChB_Korb.Value) Then
        sh.Range("AQ" & n).Value = IIf(UF1_Eingabe.ChB_Korb.Value, "Ja", "Nein")
    End If

Häufige Fehler und Lösungen

  • Laufzeitfehler 94 (Unzulässige Verwendung von Null): Dieser Fehler tritt häufig auf, wenn eine CheckBox nicht richtig initialisiert ist. Stelle sicher, dass Du NULL-Werte abfängst, wie oben beschrieben.

  • Falsche Rückgabe von Werten: Wenn die CheckBoxen nicht die erwarteten Werte zurückgeben, überprüfe, ob Du den richtigen Wert in die entsprechenden Zellen schreibst (z.B. "Ja" oder "Nein").


Alternative Methoden

Eine alternative Methode zur Verwendung von CheckBoxen in Excel ist die Verwendung von ActiveX-Steuerelementen. Diese bieten erweiterte Funktionen und eine bessere Anpassbarkeit:

  1. Füge ein ActiveX-Kontrollkästchen in Deine Arbeitsmappe ein.
  2. Verwende dafür den folgenden Code:
    If ActiveSheet.CheckBoxes("CheckBox1").Value = 1 Then
        ' CheckBox ist aktiviert
    Else
        ' CheckBox ist nicht aktiviert
    End If

Praktische Beispiele

Hier sind einige praktische Beispiele für die Verwendung von CheckBoxen in VBA:

  • Einfaches Beispiel:

    If UF1_Eingabe.ChB_Korb.Value Then
        MsgBox "Korb ist ausgewählt!"
    Else
        MsgBox "Korb ist nicht ausgewählt!"
    End If
  • Komplexeres Beispiel mit mehreren CheckBoxen:

    Dim result As String
    result = ""
    If UF1_Eingabe.ChB_Korb.Value Then result = result & "Korb, "
    If UF1_Eingabe.ChB_Tischauflage.Value Then result = result & "Tischauflage, "
    MsgBox "Ausgewählte Optionen: " & Left(result, Len(result) - 2)

Tipps für Profis

  • Verwende Enumerationen: Statt "Ja" und "Nein" kannst Du auch Enumerationen verwenden, um die Lesbarkeit Deines Codes zu verbessern.

  • Benutzerdefinierte Formate: Überlege Dir, benutzerdefinierte Formate für Deine Rückgabewerte zu erstellen, um die Darstellung in Excel zu optimieren.

  • Fehlerbehandlung: Implementiere eine robuste Fehlerbehandlung in Deinem Code, um Laufzeitfehler zu vermeiden.


FAQ: Häufige Fragen

1. Wie kann ich die Rückgabewerte der CheckBoxen in eine andere Zelle schreiben? Du kannst die Rückgabewerte wie folgt in eine andere Zelle schreiben:

sh.Range("AX" & n).Value = IIf(UF1_Eingabe.ChB_Korb.Value, "Ja", "Nein")

2. Warum kann ich keine Werte in der UserForm ändern? Das könnte daran liegen, dass die CheckBoxen einen Zustand haben, der nicht auf "Wahr" oder "Falsch" zurückgeführt werden kann. Stelle sicher, dass Du NULL-Werte abfängst und die Logik korrekt implementierst.

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