【问题标题】:Trouble with VBA checkboxesVBA 复选框的问题
【发布时间】:2018-05-03 01:12:57
【问题描述】:

我正在尝试创建一个宏,该宏将从工作簿中打印出选定的工作表。第一个工作表有一组复选框,它们都遵循命名约定“CheckBoxX”,其中 X 是该复选框的编号。我希望代码执行的操作是遍历每个复选框,查看是否已选中,然后选择相应的工作表(如果已选中)。但是,我收到错误消息“对象不支持此属性或方法”。

这是我的代码: 代码:

Option Explicit


Sub Button14_Click()
    Dim count As Integer
    Dim checkNumber As String

    For count = 1 To ThisWorkbook.Worksheets.count
        checkNumber = "CheckBox" & count
        If Sheets("Print").Shapes(checkNumber).OLEFormat.Object.Value = True Then
            Worksheets(count + 1).Select (False)
        End If
    Next count

    ActiveWindow.SelectedSheets.PrintOut

End Sub

调试总是用 if 语句标记行。

我也试过这个作为我的 if 语句:

If Sheets("Print").Shapes(checkNumber).ControlFormat.Value = 1 Then

解决方案:我所要做的就是改变这一行:

If Sheets("Print").Shapes(checkNumber).OLEFormat.Object.Value = True Then

到这里:

If Sheets("Print").Shapes(checkNumber).OLEFormat.Object.Object.Value = True Then

【问题讨论】:

  • 您的复选框是 ActiveX 类型还是表单类型?
  • 它们是 ActiveX

标签: excel vba loops checkbox


【解决方案1】:

假设您使用的是 ActiveX 类型的复选框(代码中的 OLEObject 暗示了这一点),您访问的是 Shape 对象列表而不是 OLEObjects 列表。

快速测试子是:

Sub test()
    Dim mycb As Variant
    Set mycb = ActiveSheet.OLEObjects("CheckBox1")
    Debug.Print mycb.Name
    Debug.Print mycb.Object.Value
End Sub

【讨论】:

    【解决方案2】:

    您可能需要 "Checkbox 1" 而不是 "Checkbox1"

    【讨论】:

    • 我尝试了各种不同的间距。使用该建议,我只是收到错误“找不到具有指定名称的项目”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多