【问题标题】:How to code buttons with VBA?如何使用 VBA 对按钮进行编码?
【发布时间】:2015-07-29 15:36:35
【问题描述】:

我有一个按钮的 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

这是我的打印脚本代码:

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

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

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

【问题讨论】:

    标签: vba excel button printing


    【解决方案1】:

    您需要使用按钮的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
    

    【讨论】:

    • 应该从Next ws中删除ws
    • @AgentRev 发现得很好——我的黑客行为很草率。已更正。
    • 当我运行你给我的代码时,按下按钮后,我得到一个弹出窗口,上面写着“无法运行宏 'Solution_0729_test.xlsm!pageprintTEST1'。宏可能在此工作簿中不可用或者所有宏都可能被禁用。”然而,我似乎工作的其他宏。任何想法为什么我会得到这个?
    • pageprintTEST1 例程在哪个模块中,您是否按照我的说明进行了编辑?
    • 是的,我完全复制了您所写的内容。按钮宏和 pageprintTEST1 宏都只是 ion vba window This Workbook (Code) 所以我不确定是哪个模块。
    猜你喜欢
    • 1970-01-01
    • 2022-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    相关资源
    最近更新 更多