【问题标题】:How to reference a check box in VBA for Excel如何在 VBA for Excel 中引用复选框
【发布时间】:2019-06-05 03:52:55
【问题描述】:

我使用开发人员功能区 > 插入 > ActiveX 控件 > 复选框创建了一个复选框。我想编码一个子,当检查框时,将PCAPV10工作表中的一系列值复制到BOM工作表上的范围。我不确定我是否在代码中正确引用了我的复选框,并且不断收到对象错误。有什么建议吗?

我尝试在复选框子中进行编码,并从另一个子中引用复选框。我似乎无法弄清楚这两种方法。

Private Sub CheckBox1_Click()
Dim PCAPV10 As Worksheet
Set PCAPV10 = Workbooks("CFC Calculation Program (Macro Enabled)").Sheets("Price Calculation APV10")
Dim BOM As Worksheet
Set BOM = Workbooks("CFC Calculation Program (Macro Enabled)").Sheets("BOM")
Dim chk1 As CheckBox
Set chk1 = Sheets("Price Calculation APV10").CheckBoxes("Check Box 1")
If Sheets("PCAPV10").OLEObjects("chk1").Object.Value = True Then
BOM.Range("A6:C120").Value = PCAPV10.Range("E11:I84").Value
End If
End Sub

我希望代码能够识别该框何时被选中,如果为真,则将 BOM 表中的范围设置为等于 PCAPV10 表中的范围。如果未选中,则什么也不做。相反,我收到运行时错误“1004”:应用程序定义或对象定义错误。

【问题讨论】:

  • 复选框在哪张纸上?

标签: excel vba excel-2016


【解决方案1】:

无需将 CheckBox1 声明为变量。您还将变量 PCAPV10 放入 Sheets("") 中。试试这个:

If PCAPV10.OLEObjects("CheckBox1").Object.Value = True Then
     BOM.Range("A6:C120").Value = PCAPV10.Range("E11:I84").Value
End If

如果你想定义它,我很确定没有空格:

Set chk1 = Sheets("Price Calculation APV10").CheckBoxes("CheckBox1")

【讨论】:

    【解决方案2】:

    这可能不是最佳做法,但我一直将复选框链接到它所在的单元格,以便单元格切换 TRUE / FALSE

    然后我使文本与填充颜色匹配,因此用户看不到它。

    然后在 VBA 中,我只需使用 .range().cell() 来匹配该单元格。

    所以我会使用:

    If Sheets("PCAPV10").range()
    

    而不是你所拥有的。

    【讨论】:

      【解决方案3】:

      您已经声明了复选框并设置了复选框。只需更改以下内容:

      If chk1.Value= 1 Then
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-11-01
        • 1970-01-01
        • 2018-02-10
        • 1970-01-01
        • 1970-01-01
        • 2013-10-23
        • 2016-06-25
        相关资源
        最近更新 更多