微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何按名称删除带有 VBA 的 ActiveX 按钮?

如何解决如何按名称删除带有 VBA 的 ActiveX 按钮?

我不明白为什么这段代码没有“检测”到 activex 按钮(在 Siddarth 的帮助下创建:How to rename a newly created ActiveX button?)。我看到我面前的按钮和它的属性窗口看起来像这样。

enter image description here

我什至尝试只删除一个带有 ActiveSheet.Shapes("CommandButton1").Delete 的按钮,但该行导致出现错误窗口,其中包含类似“未找到具有该名称的项目”之类的文本。 => 显然我没有使用正确的名称来称呼按钮。

我使用的代码基于 Word vba delete button not working 中使用过的 Gareth 代码

添加一个 if 条件来排除名称设置为蛇形大小写的“好”按钮(因此为“_”),i。 e.名字是我自己定义的。

Sub del_button()
Dim obj As Object
For Each obj In ActiveSheet.Shapes
    If InStr(obj.OLEFormat.Object.Name,"CommandButton") > 0 And InStr(obj.OLEFormat.Object.Name,"_") < 1 Then
        'MsgBox (obj.OLEFormat.Object.Name) - just was there for me to "notice",so I am set to notice when a button is going to be deleted
        obj.Delete
    End If
Next obj
'ActiveSheet.Shapes("CommandButton1").Delete   ---- THIS LINE throws an error
End Sub

=> 如果我使用的名称不正确,我应该在代码中指定什么名称?还是我必须完全使用其他东西?

解决方法

这是有效的代码:

Sub del_button()
Dim obj As Object
For Each obj In ActiveSheet.Shapes
    If InStr(obj.OLEFormat.Object.Name,"Object") > 0 And _
    InStr(obj.OLEFormat.Object.Name,"_") < 1 Then
        obj.Delete
    End If
Next obj
End Sub

Siddarth's comment 包含了有用的细节,这些细节基本上是我问题的解决方案。

Microsoft's help page on shape objects also has some interesting bits on this topic,namely the following:

工作表上的 ActiveX 控件有两个名称:包含该控件的形状的名称,您可以在查看工作表时在名称框中看到该名称,以及该控件的代码名称,您可以在属性窗口中(名称)右侧的单元格。首次向工作表添加控件时,形状名称和代码名称匹配。但是,如果您更改形状名称或代码名称,则另一个不会自动更改以匹配。

您在其事件过程的名称中使用控件的代码名称。但是,当您从工作表的 Shapes 或 OLEObjects 集合返回控件时,您必须使用形状名称而不是代码名称来按名称引用控件。

所以考虑到 2, 一些位:

  • 名称,或者更确切地说,字符串,我必须检查的是形状名称。形状名称在 name box 中可见。

  • 形状名称未本地化,但其在名称框中显示的文本已本地化。因此,上面 VBA 代码中的英文术语“Object”。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。