正如标题所暗示的那样,我的宏在原始工作表上可以正常工作,但在复制的工作表上同样的宏会失败。
我有一个从sheet1获取输入的Excel工作簿,用于复制和填充sheet2,因此该书现在包含sheet1、sheet2和sheet3 (它是sheet2的填充副本)。Sheet2包含一堆复选框,它们被复制到sheet3。Sheet2始终具有相同的名称,但sheet3的名称每次都会更改。
我在工作簿模块中编写了一个宏,以便在单击每个复选框时将信息添加到几个不同的书中。当单击sheet2上的复选框时,宏按预期工作,但当我单击sheet3上的复选框时,我收到“运行时错误'1004':无法获取工作表类的CheckBoxes属性”。
下面是出现错误的代码行:
表名= ActiveSheet.name
如果Sheets(sheetname).CheckBoxes("43") =1,则
这两个复选框调用相同的宏,工作表的名称由'sheetname = ActiveSheet.Name‘指定,在sheet3上使用时显示正确。
我尝试过的东西都是徒劳的:
为什么它在一张纸上工作,而在另一张纸上不起作用?
谢谢您抽时间见我!
发布于 2018-06-20 07:20:13
将CheckBox
复制到另一个工作表时,其Name
将更改。您需要另一种方法来识别它们,可能是Caption
您可以使用这个小Sub来标识工作表上复选框的名称和标题
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
发布于 2018-06-20 07:18:27
您应该能够通过以下方式访问该复选框
Sheets(sheetname).Shapes(MyShapeIndex).OLEFormat.Object.Value
或
Sheets(sheetname).OLEObjects(OLEIndex).Object.Value
希望这能有所帮助。
https://stackoverflow.com/questions/50937852
复制相似问题