单击复制工作表上的复选框时'unable to get checkboxes property' Excel VBA



正如标题所暗示的那样,我的宏在原始工作表上按预期工作,但相同的宏在复制的工作表上失败。

我有一个 Excel 工作簿,它从工作表 1 中获取输入来复制和填充工作表 2,这样这本书现在包含工作表 1、工作表 2 和工作表 3(这是工作表 2 的填充副本(。Sheet2 包含一堆复选框,这些复选框被复制到 sheet3。Sheet2 始终具有相同的名称,但 sheet3 的名称每次都会更改。

我在工作簿模块中编写了一个宏,以便在单击每个复选框时向几本不同的书籍添加信息。单击工作表 2 上的复选框时,宏按预期工作,但是当我单击 sheet3 上的复选框时,我收到"运行时错误'1004':无法获取工作表类的 CheckBox 属性"。

这是收到错误的行:

工作表名称 = ActiveSheet.name

如果工作表(工作表名称(。复选框("43"( = 1 则

两个复选框调用相同的宏,工作表的名称由"工作表名称 = ActiveSheet.Name"指示,在工作表 3 上使用时显示正确。

我尝试过的事情徒劳无功:

  • 将"= 1"更改为"= True">
  • 将"复选框"更改为"OLEObjects">
  • 已验证"工作表名称"是否正确
  • 将工作表 3 复选框更改为 ActiveX,应用的代码
  • 更改
  • 复制的复选框的名称并更改代码以反映新名称
  • 在工作表 2 和/或工作表 3 模块上写入宏
  • ">
  • 复选框("43"(。值 = 1">

为什么它在一张纸上工作,而在另一张纸上不起作用?

谢谢你的时间!

CheckBox复制到另一个工作表时,其Name将更改。 您需要另一种方法来识别它们,也许是Caption

您可以使用这个小子来识别工作表上复选框的名称和标题

Sub LitsNames()
Dim ws As Worksheet
Dim cb As CheckBox
Set ws = ActiveSheet
For Each cb In ws.CheckBoxes
Debug.Print "Name = " & cb.Name, "Caption = " & cb.caption
Next
End Sub

在"即时"窗口中查看结果

此函数将返回带有给定标题的复选框(如果有多个具有给定标题的 CB,则这将不起作用(

Function GetCB(ws As Worksheet, caption As String) As CheckBox
Dim cb As CheckBox
For Each cb In ws.CheckBoxes
If cb.caption = caption Then
Set GetCB = cb
Exit Function
End If
Next
End Function

这样使用这个

Sub Demo()
Dim cb As CheckBox
Set cb = Nothing
Set cb = GetCB(ActiveSheet, "Some Caption")
If Not cb Is Nothing Then
If cb.Value = 1 Then
' do stuff
End If
End If
End Sub

您应该能够通过以下方式访问该复选框

Sheets(sheetname).Shapes(MyShapeIndex).OLEFormat.Object.Value

Sheets(sheetname).OLEObjects(OLEIndex).Object.Value

希望有帮助。

相关内容

最新更新