如何为 Excel 引用 VBA 中的复选框

How to reference a check box in VBA for Excel

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

我试过在复选框子中编码,并且还引用了另一个子中的复选框。我似乎想不出任何一种方法来做到这一点。

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 sheet 内的范围设置为等于 PCAPV10 sheet 内的范围。如果未选中,则什么也不做。相反,我收到 运行 时间错误“1004”:应用程序定义或对象定义的错误。

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

然后我让文本与填充颜色相匹配,这样用户就看不到了。

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

所以我会使用:

If Sheets("PCAPV10").range()

而不是你所拥有的。

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

If chk1.Value= 1 Then

无需将 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")