Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Kontrollkästchen Makro Frage





Frage

Hallo ! Wenn ich ein Kontrollkästchen anklicke möchte ich das in der Zelle E3 ein Text (zB: "Neu") reingeschrieben wird. Wie mache ich das ? Oder ist ein Kobinationsfeld hier einfacher, das das ausgewählte in der Zelle E3 aufscheint ? DANKE Ce

Antwort 1 von fürLau

Hallo

..so vieleicht:

Private Sub CheckBox1_Click()
If CheckBox1.Value = True Then
ActiveSheet.Range("E3").Value = "Neu"
Else
ActiveSheet.Range("E3").Value = ""
End If
End Sub


Gruß fürLau

Antwort 2 von djsquirrel

Hi !

Also ich habe es versucht und als Marko DAU bitte ich nochmals um Hilfe:

Hier das File mit 100% genau Deinem Code/Makro:
http://www.Eichhorn.cc/file/CheckBox1_Click.xls

Danke
ce

Antwort 3 von fürLau

Leider.;-( gibts in Excel verschiedene Kontrollkästchen, Du hast Dich wohl für ein Falsches entschloßen!

Antwort 4 von CaroS

Hallo djsquirrel,

das Problem und das Missverständnis ist, dass Du offenbar ein Formular-Steuerelement und kein Toolbox-Steuerelement verwendet hast. (Deshalb darf der VBA-Code auch nicht mit Sub CheckBox1_Click() bezeichnet werden.) Toolbox-Steuerelemente sind meiner Meinung nach mit VBA einfacher zu handhaben als Formular-Steuerelemente, hier (bei den Formular-Steuerelementen) ist es schon schwieriger, das richtige überhaupt erstmal zu finden und darauf zuzugreifen.

Für das Steuerelement "NEU" in Deiner Beispiel-Datei würde folgender Code gehen, Du musst ihn nur über rechte Maustaste -- Makro zuweisen... zuweisen:

Sub Klick_FormCB_E3()
Dim sh As Shape
For Each sh In ActiveSheet.Shapes
If sh.Type = msoFormControl Then
If sh.FormControlType = xlCheckBox And sh.AlternativeText = "NEU" Then
If sh.ControlFormat.Value = 1 Then
ActiveSheet.Range("E3").Value = "Neu"
Else
ActiveSheet.Range("E3").Value = ""
End If
End If
End If
Next

Gruß,
CaroS

Antwort 5 von djsquirrel

Hallo CaroS,

danke für Deine Hilfe, jedoch FUNKTIONIERT ES LEIDER NICHT !!!

Er schreibt jedesmal "Fehler beim Kopilieren"


:-(
ce

Antwort 6 von fürLau

Hallo

Ich hoffe der Kollege caroS ist damit einverstanden wenn ich seinen Code vervollständige.
Es fehlt die Anweisung End Sub am Ende des Codes, also nach Next .

Gruß

Antwort 7 von fürLau

Nachtrag:
für ein Kontrollkästchen aus Symbolleiste Formular ginge das:

Sub Check_Box()
If ActiveSheet.CheckBoxes("Check Box 2").Value = 1 Then
ActiveSheet.Range("E3").Value = "Neu"
Else: ActiveSheet.Range("E3").Value = "": End If
End Sub


Das fette ist der vba-Name des "Kontrollkästchen 2".

Antwort 8 von djsquirrel

hi fürLau !

DANKE es funkt !!

Wer es haben will:

http://www.Eichhorn.cc/file/CheckBox1_Click.xls

Mit freundlichen Grüssen
Christian

Antwort 9 von CaroS

Hallo allerseits!

@fürLau / AW4, 5, 6:
Bin einverstanden und sage danke! Es war auch keine böse Absicht, sondern einfach nur vergessen oder abgerutscht beim Markieren/Kopieren.

Und ansonsten habe ich auch nichts gegen Widerspruch in der Sache, denn der ist ja meistens berechtigt oder zumindest ein Denkanstoß, wie andere etwas sehen bzw. lösen würden.

In dem Sinne ist für mich natürlich vor allem Deine Antwort 7 sehr interessant.
ActiveSheet.CheckBoxes("Name_der_CheckBox")
ist kürzer, direkter und effektiver als meine Variante, aber da bin ich - selbst mit der VBA-Hilfe - nicht drauf gekommen. Man kann nicht alles wissen, aber man kann in so einem Forum eine Menge lernen. Deshalb auch dafür: Danke!

Für mich selber kann ich das sehr gut verwenden, da brauche ich nicht über den Alter-nativeText gehen. Dafür muss ich aber den Namen wissen, ihn notfalls muss per VBA ermitteln. Oder kennst Du einen einfacheren Weg (bei Formular-Steuerelementen)?
Bei Problemen im Forum wird es schwieriger, denn da weiß man ja meistens den Namen der CheckBox nicht und oft noch nicht einmal, ob es überhaupt eine CheckBox oder von welcher Art das Steuerelement ist, Formular- oder Toolbox-Steuerelement.

Die Schreibweise
Else: ActiveSheet.Range("E3").Value = "": End If
werde ich aber wahrscheinlich nicht übernehmen, selbst wenn man so die eine oder andere Code-Zeile sparen kann. Oder steckt da noch mehr dahinter?

Gruß,
CaroS

Antwort 10 von fürLau

Hallo @CaroS

Nein - nur Zeilensparend wegen kleinem Bildschirm -
und schöne Grüße.