【问题标题】:How do I use checkboxes in an IF-THEN statement in Excel VBA 2010?如何在 Excel VBA 2010 的 IF-THEN 语句中使用复选框?
【发布时间】:2019-09-18 10:16:29
【问题描述】:

我需要为 IF-THEN 语句使用复选框的值。根据用户检查的内容,我计算事物的方式会发生变化。但是,我不知道如何使用复选框值,或者如何检测它们。这是我到目前为止的代码:

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

我希望它做的,就像测试一样,如果选中“时间”复选框,然后按下按钮继续,我希望它使用 IF-THEN 说出类似“YAY”的内容陈述。如果未选中“时间”复选框并且您按继续,我希望它说“AWW...”。

这是我试图实现的,但它不起作用。

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

我做错了什么?

【问题讨论】:

    标签: vba excel excel-2010


    【解决方案1】:
    If Sheets("Sheet1").OLEObjects("CheckBox1").Object.Value = True Then
    

    我相信蒂姆是对的。你有一个表单控件。为此,您必须使用它

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

    【讨论】:

    • 我收到一个错误,“无法获取 Worksheet 类的 OLEObjects 属性”。 ?
    • 1) 您是否将“Sheet1”替换为相关工作表名称? 2)您是否将“CheckBox1”替换为相关的复选框名称?
    • 是的,它仍然没有工作:\ 我只是隔开“复选框1”,因为当我录制一个宏并删除该复选框时,宏是:ActiveSheet.Shapes.Range(Array("Check Box 1")).Select
    • 您可能必须更改 Siddharth 对“复选框 1”的响应中的名称以匹配您的形状名称
    • 这适用于 ActiveX 复选框,但我不确定它是否适用于表单复选框
    【解决方案2】:

    你可以试试这样的......

    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
    

    【讨论】:

      【解决方案3】:

      复选框有一个链接单元格,其中包含代表复选框状态的 True/False。引用此单元格的值比引用嵌入对象(即复选框)的值要容易得多。

      手动:右键单击复选框,选择“格式”,单击“链接单元格”框,然后选择包含复选框值的单元格。

      在代码中:

      Set cbTime = ActiveSheet.CheckBoxes.Add(100, 100, 50, 15)
      With cbTime
          .Value = xlOff ' = unchecked  xlOn = checked
          .LinkedCell = "$A$1"
      End With
      

      【讨论】:

        【解决方案4】:
        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
        

        【讨论】:

          【解决方案5】:

          我发现我可以使用Worksheets("SheetName").CB_Checkboxname.value 直接访问复选框 直接与其他对象无关。

          【讨论】:

            【解决方案6】:

            似乎在您使用的 ActiveX 复选框控件的 VBA 宏代码中

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

            对于您使用的表单复选框控件

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2022-01-22
              • 2013-09-25
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多