如何在VBA for Excel中引用复选框

时间:2019-06-04 14:58:16

标签: excel vba excel-2016

我使用开发人员功能区>插入> 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

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

4 个答案:

答案 0 :(得分: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")

答案 1 :(得分:0)

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

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

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

所以我会用:

If Sheets("PCAPV10").range()

而不是你拥有的东西。

答案 2 :(得分:0)

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

If chk1.Value= 1 Then

答案 3 :(得分:0)

我认为问题是您错误地从Form Controls而不是ActiveX中选择了Checkbox。仔细检查一下。然后修改您的代码,如下所示:

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")
If CheckBox1.Value = True Then
    BOM.Range("A6:C120").Value = PCAPV10.Range("E11:I84").Value
End If
End Sub