如何在活动工作表上动态创建按钮?

时间:2017-12-16 17:10:32

标签: excel vba excel-vba

因此,我在工作簿中创建了一个主菜单,如果用户单击一个按钮,则会创建一个新工作表并为用户打开以查看某些数据。

现在,我想动态(通过VBA代码)在当前活动工作表上创建一个按钮,其中包含允许用户关闭工作表的数据(基本上删除ActiveSheet并返回到主菜单

我尝试查看VBA帮助以获取有关按钮控件的信息,但我能找到的只是CommandButton上的信息(我相信它只能在UserForm中使用)。

  • 我的错误是错误的,并且CommandButton也可以在Userforms之外使用吗?
  • 或者是否有我无法找到的Button对象?

我搜索了这个主题并且只发现了这篇文章,但它没有用。如果有帮助,我正在使用Excel 2010。 How to add a button programmatically in VBA next to some sheet cell data?

2 个答案:

答案 0 :(得分:0)

解决此问题的一种方法是使用模板。使用所述按钮创建工作表。在工作表模块中,您可以使用:

Public Sub CopySheet()

    ThisWorkbook.Worksheets("Template").Copy After:=Sheets(Sheets.Count)

    With ActiveSheet
        .Name = "Your Name"
    End With

    'Fill with data etc....

End Sub

创建工作表时,您可以使用以下模板:

import sys
x = 2
print (sys.getsizeof(x))

复制的模板现在有你的删除按钮。还有其他方法可以实现,但这可能是最简单的。

P.s。:为工作表添加一个按钮"添加"在开发人员选项卡中对表单的窗体或活动X控件。你使用哪一个不应该与模板有关。

答案 1 :(得分:0)

这是另一种方式......

Sub CreateSheetAddButton()

    ' Set the worksheet to a new sheet
    Dim ws As Worksheet
    With ThisWorkbook
        Set ws = .Sheets.Add(After:=.Sheets(.Sheets.Count))
    End With

    Dim btn As Button
    ' Add a button and assign an onaction macro
    With ws
        .Name = "YourName"
        Set btn = .Buttons.Add(71.25, 26.25, 107.25, 63.75)
    End With

    With btn
        .OnAction = "DeleteWS"
        .Caption = "Delete Current Sheet"
        .Name = "btnDel"
    End With

    ' Clean up
    Set ws = Nothing
    Set btn = Nothing

End Sub

Sub DeleteWS()

    Dim ws As Worksheet, wsMain As Worksheet
    Set ws = ThisWorkbook.ActiveSheet
    Set wsMain = ThisWorkbook.Worksheets("Main")

    With ws
        Application.DisplayAlerts = False
        ws.Delete
        wsMain.Activate
        Application.DisplayAlerts = True
    End With

    ' Clean up
    Set ws = Nothing
    Set wsMain = Nothing

End Sub