如何用VBA编码按钮?

Cam*_*Cam 0 printing excel vba button excel-vba

我有一个按钮的vba脚本,它在我的工作簿中的每个工作表上放置一个按钮.我想对这些按钮进行编程,这样每次按下它们时,它们都会调用一个打印脚本来打印纸张上的信息.这是我对按钮的代码:

Sub AddButtons()
    Dim ws As Excel.Worksheet
    Dim btn As Button

    For Each ws In ThisWorkbook.Worksheets
        Set btn = ws.Buttons.Add(625, 0, 50, 25)
        Call pageprintTEST1(ws)
    Next ws
End Sub
Run Code Online (Sandbox Code Playgroud)

这是我对打印脚本的代码:

Sub pageprintTEST1(ws As Excel.Worksheet)
 Application.Dialogs(xlDialogPrinterSetup).Show
         Worksheets(ws).Activate
   With ActiveWorkbook.Worksheets(ws).PageSetup
        .PrintArea = "A1:O48"
        .Orientation = xlLandscape
        .Zoom = False
        .FitToPagesTall = 1
        .FitToPagesWide = 1
    End With
    ActiveWorkbook.Worksheets(ws).PrintOut
Run Code Online (Sandbox Code Playgroud)

我一直遇到一些问题.首先,这个脚本为每个工作表添加了按钮,我只希望从工作表5向前添加到工作表上的按钮(因此前4页上没有按钮).其次,它不等我打开打印机对话框之前单击按钮,一旦你选择了打印机,它就会显示错误不匹配.

我研究了如何将变量传递给不同的subs和call方法,这似乎是正确的,但现在我不确定我哪里出错了.如果有人有任何建议或知道该怎么做,我将非常感激!

Ror*_*ory 5

您需要使用OnAction按钮的属性来存储宏名称,但不能将对象变量传递给它.由于该按钮只能在其工作表处于活动状态时单击,因此您可以使用:

Sub AddButtons()
    Dim btn As Button
    Dim n As Long

    For n = 5 To ThisWorkbook.Worksheets.Count
        Set btn = ThisWorkbook.Worksheets(n).Buttons.Add(625, 0, 50, 25)
        btn.OnAction = "pageprintTEST1"
    Next
End Sub

Sub pageprintTEST1()
 Application.Dialogs(xlDialogPrinterSetup).Show
   With ActiveSheet.PageSetup
        .PrintArea = "A1:O48"
        .Orientation = xlLandscape
        .Zoom = False
        .FitToPagesTall = 1
        .FitToPagesWide = 1
    End With
    ActiveSheet.PrintOut
End Sub
Run Code Online (Sandbox Code Playgroud)