删除程序生成的按钮

时间:2016-02-03 10:06:34

标签: excel vba excel-vba

我在VBA项目中有以下代码行:

ActiveSheet.Shapes("Button 1").Delete

如果它说“按钮1”,我希望它链接到某种变量。

我问的原因是我在“索引”工作表上有一个链接,它使用VBA创建一个新工作表(一个单独的模板工作表的副本),新创建的工作表包含上面的按钮。当我在新复制的工作表上单击该按钮时,它应该执行操作,然后应该删除该按钮。

我面临的问题是按钮名称会在创建的每个单独工作表上发生更改。

在工作表5中,它将被称为“按钮5”,在工作表6中,它将被称为“按钮6”等。由于这个原因,上面的代码行不起作用,因为它仍然引用“按钮1” ”。

有没有人对如何正确引用这个有任何想法?

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

如果要从按钮调用的代码中删除按钮,则为:

ActiveSheet.Shapes(Application.Caller).Delete

答案 1 :(得分:0)

修改

在仔细阅读你的问题后,我想到了这一点。 无论数字如何,它都会捕获以“按钮”开头的工作表上的所有形状。

Dim frmButton As Shape
For Each frmButton In ThisWorkbook.Worksheets("Sheet1").Shapes
    If frmButton.Name Like "Button*" Then
        frmButton.Delete
    End If
Next

您可以使用下面的代码包装上面的代码,以浏览多张图片。

Dim ws As Worksheet
For Each ws in ThisWorkbook.Worksheets
    If Not ws.Name = "Sheet2" Then 'Exclude certain sheets "Sheet2" is excluded in this case.
        'Code
    End If
Next ws

编辑结束

<小时/> 对于ActiveX控件,请尝试:

ThisWorkbook.Worksheets("Sheet1").OLEobjects("CommandButton1").Delete 

将“Sheet1”和“CommandButton1”替换为属性中的实际名称,不要将其与标题混淆,尤其是对于按钮。

对于表单控件按钮,请尝试:

ThisWorkbook.Worksheets("Sheet1").Shapes("Button 1").Delete

如果您指的是与代码所在的工作簿不同的工作簿,请将ThisWorkbook替换为Workbooks("Book1")。将“Book1”替换为工作簿的实际名称。

由于“按钮1”是一个字符串,您可以将其替换为包含字符串的变量,但请注意,如果变量中没有包含该名称的形状,您将收到错误。