我使用开发人员功能区>插入> 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':应用程序定义的错误或对象定义的错误。
答案 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