所以我在我的工作簿中创建了一个主菜单,如果用户单击一个按钮,则会创建一个新工作表并为用户打开以查看某些数据。
现在,我想动态地(通过VBA代码)在当前活动的工作表上创建一个按钮,该数据允许用户关闭工作表(基本上删除ActiveSheet并返回主菜单)
我尝试查看VBA帮助以获取有关按钮控件的信息,但我能找到的只是CommandButton上的信息(我相信它只用于UserForm)。
我搜索了这个主题并且只发现了这篇文章,但它不起作用。如果有帮助,我正在使用Excel 2010。 How to add a button programmatically in VBA next to some sheet cell data?
解决此问题的一种方法是使用模板。使用所述按钮创建工作表。在工作表模块中,您使用此:
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控件“添加”到工作表中。您使用哪一个与模板无关。
这是另一种方式......
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