wake-up-neo.net

Überprüfen, ob ein auf Arbeitsblättern basierendes Kontrollkästchen aktiviert ist

Ich versuche mit einer IF-Klausel festzustellen, ob mein Kontrollkästchen mit dem Namen "Kontrollkästchen 1" für die weitere Verwendung in meinem Programm aktiviert ist oder nicht.

Mein aktueller Code:

Sub Button167_Click()
 If ActiveSheet.Shapes("Check Box 1") = True Then
 Range("Y12").Value = 1
 Else
 Range("Y12").Value = 0
 End If
End Sub

Das scheint nicht zu funktionieren, aber das Debug sagt mir, dass es ein Problem mit dem gibt

      ActiveSheet.Shapes("Check Box 1")

Ich weiß jedoch, dass dieser Code funktioniert (obwohl er einem anderen Zweck dient):

ActiveSheet.Shapes("Check Box 1").Select
With Selection
.Value = xlOn

BEARBEITEN: Wenn weitere Informationen erforderlich sind, befinden sich meine Kontrollkästchen (auf meiner Seite befinden sich 200) in Blatt 1 mit dem Namen "Demande". Und jedes Kontrollkästchen hat den gleichen formatierten Namen wie "Kontrollkästchen ...".

Alle Hilfe wäre dankbar. Vielen Dank

20
Sub Button167_Click()
 If ThisWorkbook.Worksheets(1).Shapes("Check Box 1").OLEFormat.Object.Value = 1 Then
 Range("Y12").Value = 1
 Else
 Range("Y12").Value = 0
 End If
End Sub

1 ist aktiviert, -4146 ist deaktiviert, 2 ist gemischt (graues Kästchen)

21
Motes

Versuchen Sie das?

Sub Sample()
    Dim cb As Shape

    Set cb = ActiveSheet.Shapes("Check Box 1")

    If cb.OLEFormat.Object.Value = 1 Then
        MsgBox "Checkbox is Checked"
    Else
        MsgBox "Checkbox is not Checked"
    End If
End Sub

Ersetzen Sie Activesheet durch den entsprechenden Blattnamen. Ersetzen Sie auch Check Box 1 mit dem entsprechenden Ankreuzfeldnamen.

10
Siddharth Rout

Aufbauend auf vorherigeAntworten können Sie die Tatsache nutzen, dass True -1 und False 0 ist, und Ihren Code so verkürzen :

Sub Button167_Click()
  Range("Y12").Value = _
    Abs(Worksheets(1).Shapes("Check Box 1").OLEFormat.Object.Value > 0)
End Sub

Wenn das Kontrollkästchen aktiviert ist, ist .Value = 1.

Worksheets(1).Shapes("Check Box 1").OLEFormat.Object.Value > 0 gibt True zurück.

Durch Anwenden der Funktion Abs wird True in 1 Konvertiert.

Wenn das Kontrollkästchen deaktiviert ist, ist .Value = -4146.

Worksheets(1).Shapes("Check Box 1").OLEFormat.Object.Value > 0 gibt False zurück.

Durch Anwenden der Funktion Abs wird False in 0 Konvertiert.

3
JimmyPena

Es scheint, dass Sie in VBA-Makrocode für ein ActiveX-Kontrollkästchen Steuerelement verwenden

If (ActiveSheet.OLEObjects ("CheckBox1"). Object.Value = True)

und für ein Formular-Kontrollkästchen, das Sie verwenden

If (ActiveSheet.Shapes ("CheckBox1"). OLEFormat.Object.Value = 1)

0
Allan F