首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在复制的工作表上单击复选框时,Excel VBA“无法获取复选框属性”

在复制的工作表上单击复选框时,Excel VBA“无法获取复选框属性”
EN

Stack Overflow用户
提问于 2018-06-20 06:37:03
回答 2查看 4K关注 0票数 0

正如标题所暗示的那样,我的宏在原始工作表上可以正常工作,但在复制的工作表上同样的宏会失败。

我有一个从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上使用时显示正确。

我尝试过的东西都是徒劳的:

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

谢谢您抽时间见我!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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
票数 1
EN

Stack Overflow用户

发布于 2018-06-20 07:18:27

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

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

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

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50937852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档