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

问题描述 投票:0回答:2

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

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

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

  • 我错了这个信念,CommandButton也可以在Userforms之外使用吗?
  • 或者是否有我无法找到的Button对象?

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

excel vba excel-vba
2个回答
0
投票

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

Private Sub CommandButton1_Click()
    Me.Delete
    ThisWorkbook.Worksheets("MainMenu").Activate
End Sub

创建工作表时,您将使用此模板,如下所示:

Public Sub CopySheet()

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

    With ActiveSheet
        .Name = "Your Name"
    End With

    'Fill with data etc....

End Sub

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

P.s。:要向工作表添加按钮,请在开发人员选项卡中将表单或active-X控件“添加”到工作表中。您使用哪一个与模板无关。


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
© www.soinside.com 2019 - 2024. All rights reserved.