如何在VBA中添加命令button?

我正在尝试将一个button添加到Excel工作簿,以便它显示在每个工作表中。 对我原来的问题的一个很好的答案给了我一个macros,在每个表上创buildbutton:

Sub AddButtons() Dim ws As Excel.Worksheet Dim btn As Button For Each ws In ThisWorkbook.Worksheets Set btn = ws.Buttons.Add(X, Y, W, H) [set btn properties] Next ws End Sub 

我现在遇到了设置button属性的麻烦,所以按下button时会打印表格。 这里再次是我的打印macros:

  Dim WS_Count As Integer Dim i As Integer ' Set WS_Count equal to the number of worksheets in the active workbook. WS_Count = ActiveWorkbook.Worksheets.Count 'allows user to set printer they want to use Application.Dialogs(xlDialogPrinterSetup).Show ' Begin the loop. For i = 5 To WS_Count Worksheets(i).Activate With ActiveWorkbook.Worksheets(i).PageSetup .PrintArea = "A1:O48" .Orientation = xlLandscape .Zoom = False .FitToPagesTall = 1 .FitToPagesWide = 1 End With ActiveWorkbook.Worksheets(i).PrintOut 

关于如何将这个macros整合到button属性(传递variables和创build一个新的打印子文件)方面已经有了一些很好的build议,但是我对VBA来说很新颖,并且不能成功地实现这个function。 理想情况下,我会有一个buttonmacros,它会创buildbutton,每次按它都会调用每个工作表的打印macros。

最后一件事,我试图改变button代码,以便它只添加button到表5。 如果有人知道如何做到这一点,这将是非常好的。

任何build议是有益的,非常感谢!

尝试这个:

 Sub AddButtons() Dim ws As Excel.Worksheet Dim btn As Button For Each ws In ThisWorkbook.Worksheets Set btn = ws.Buttons.Add(X, Y, W, H) btn.OnAction = "MySub" ' MySub is executed when btn is clicked ' Substitute the name of your printing subroutine btn.Caption = "Print" 'set additional btn properties as needed Next ws End Sub 

XY确定位置, WH确定button大小。

这将添加一个button(表单控制)并分配一个现有的macros。

 Sub test() Dim cb As Shape Set cb = Sheet1.Shapes.AddFormControl(xlButtonControl, 10, 10, 100, 25) cb.OnAction = "PrintMacro" End Sub 

 Private Sub PrintMacro() MsgBox "Test" ' for testing pursposes ' you actually put your print code here End Sub 

现在只需要从Sheet 5开始添加button,您可以尝试:

  1. 生成所有表单名称的列表(如果只有其中的几个)

     Dim shname For Each shname In Array("Sheet 5", "Sheet 6", "Sheet 7") test Sheets(shname) ' note that you'll have to use below test sub Next 
  2. 反过来去做 列出如果列表中没有列出要排除和testing的每张纸。

     Dim sh As Worksheet Dim xcludesheet: xcludesheet = Array("Sheet1", "Sheet2", "Sheet3", "Sheet4") For Each sh In Worksheets If IsError(Application.Match(sh.Name, xcludesheet, 0)) Then test Sheets(sh.Name) End If Next 

您的testing子将在以上样本中使用。

 Sub test(ws As Worksheet) Dim cb As Shape Set cb = ws.Shapes.AddFormControl(xlButtonControl, 10, 10, 100, 25) cb.OnAction = "PrintMacro" End Sub