wake-up-neo.com

Wie verwende ich Kontrollkästchen in einer IF-THEN-Anweisung in Excel VBA 2010?

Ich muss den Wert von Kontrollkästchen für eine IF-THEN-Anweisung verwenden. Je nachdem, was der Benutzer überprüft, ändert sich die Art und Weise, wie ich die Dinge berechnen muss. Ich kann jedoch nicht herausfinden, wie die Kontrollkästchenwerte verwendet werden oder wie man sie erkennt. Hier ist der Code, den ich bis jetzt habe:

Private Sub Workbook_Open()
    Range("E1:F7,A1:A4,B1:B4,C1:C3").Select
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    Range("A1").Select
    Range("A1") = "Time"
    Range("B1") = "Specimen Shape"
    Range("C1") = "Data Type"
    Range("A1:C1").Font.Bold = True
    Range("E1") = "Owner"
    Range("E2") = "Experiment Date"
    Range("E3") = "Specimen ID"
    Range("E4") = "Contaminant"
    Range("E5") = "Leachant"
    Range("E6") = "Temperature"
    Range("E7") = "Regression Title"
    Range("E1:E7").Font.Bold = True
    Columns("A:E").EntireColumn.EntireColumn.Autofit
    'Formatting Column A
    Columns("A").EntireColumn.ColumnWidth = 9.71
    ActiveSheet.CheckBoxes.Add(4, 14.5, 72, 17.25).Select
    Selection.Characters.Text = "Days"
    Range("A6").Select
    ActiveSheet.CheckBoxes.Add(4, 30.5, 73.5, 17.25).Select
    Selection.Characters.Text = "Hours"
    ActiveSheet.CheckBoxes.Add(4, 45.75, 52.5, 17.25).Select
    Selection.Characters.Text = "Minutes"
    'Formatting Column B
    ActiveSheet.CheckBoxes.Add(58, 14.5, 72, 17.25).Select
    Selection.Characters.Text = "Cylinder"
    ActiveSheet.CheckBoxes.Add(58, 30.5, 73.5, 17.25).Select
    Selection.Characters.Text = "Wafer"
    ActiveSheet.CheckBoxes.Add(58, 45.75, 52.5, 17.25).Select
    Selection.Characters.Text = "Irregular"
    'Formatting Column C
    Columns("C").EntireColumn.ColumnWidth = 12.71
    ActiveSheet.CheckBoxes.Add(140.5, 14.5, 72, 17.25).Select
    Selection.Characters.Text = "Incremental"
    ActiveSheet.CheckBoxes.Add(140.5, 30.5, 72, 17.25).Select
    Selection.Characters.Text = "Cumulative"
    Columns("F").EntireColumn.ColumnWidth = 60
    Range("A1:C1").HorizontalAlignment = xlCenter
    Range("F1").Select
    Dim btn As Button
    Dim rng As Range
    With Worksheets("Sheet1")
        Set rng = .Range("A9:C9")
            Set btn = .Buttons.Add(rng.Left, rng.Top, rng.Width, rng.Height)
        With btn
            .Caption = "After making your selections above, click this button to continue."
            .AutoSize = True
            .OnAction = "DataInput"
        End With
    End With
End Sub

Ich möchte, dass es nur als Test gilt, wenn das Kontrollkästchen "Time" (Zeit) markiert ist und die Schaltfläche gedrückt wird, um fortzufahren. Ich möchte, dass "YAY" mit einer IF-THEN-Anweisung angezeigt wird. Wenn das Kontrollkästchen "Zeit" nicht markiert ist und Sie auf "Weiter" drücken, würde ich "AWW ..." sagen.

Ich habe versucht, dies zu erreichen, und es funktioniert nicht.

Sub DataInput()
    If ActiveSheet.Shapes.Range(Array("Check Box 1")).Value = True Then
    MsgBox ("Yay")
    Else: MsgBox ("Aww")
    End If
End Sub

Was mache ich falsch?

9
TheTreeMan
If Sheets("Sheet1").OLEObjects("CheckBox1").Object.Value = True Then

Ich glaube, Tim hat recht. Sie haben ein Formularsteuerelement. Dafür musst du das nutzen

If ActiveSheet.Shapes("Check Box 1").ControlFormat.Value = 1 Then
28
Siddharth Rout

Sie können so etwas versuchen ....

Dim cbTime

Set cbTime = ActiveSheet.CheckBoxes.Add(100, 100, 50, 15)
With cbTime
    .Name = "cbTime"
    .Characters.Text = "Time"
End With

If ActiveSheet.CheckBoxes("cbTime").Value = 1 Then 'or just cbTime.Value
    'checked
Else
    'unchecked
End If
5
Tim Williams

Ein Ankreuzfeld hat eine verknüpfte Zelle, die den Wert des Ankreuzfelds als Wahr/Falsch enthält. Es ist viel einfacher, auf den Wert dieser Zelle zu verweisen als auf den Wert des eingebetteten Objekts, das das Kontrollkästchen ist. 

Manuell: Klicken Sie mit der rechten Maustaste auf das Kontrollkästchen, wählen Sie "Format", klicken Sie in das Feld "Verknüpfte Zelle" und wählen Sie die Zelle aus, die den Kontrollkästchenwert enthalten soll.

In Code:

Set cbTime = ActiveSheet.CheckBoxes.Add(100, 100, 50, 15)
With cbTime
    .Value = xlOff ' = unchecked  xlOn = checked
    .LinkedCell = "$A$1"
End With
4
Jon Peltier
Sub Datainput()
'Checkbox values are 0 (false), 1 (true), 2 (changed or grey)
    If activesheet.CheckBoxes("Check Box 1").value = 1 then
        Msgbox ("Yay")
        Else: Msgbox("Aww")
    End if
End Sub
3
Zach

Ich habe festgestellt, dass ich mit Worksheets("SheetName").CB_Checkboxname.value Direkt auf die Checkbox zugreifen kann, ohne sich auf zusätzliche Objekte zu beziehen.

0
Giso

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