首页 > 解决方案 > 在另存为提示失败后更改 Application.ActivePrinter 的 Workbook_Open() 代码

问题描述

此代码应该更改打印机,但只运行另存为提示。我的用户是忙碌的农场工人,因此必须在没有他们干预的情况下更换打印机。此代码的原因是在此工作簿之前使用了 Zebra 标签打印机,除非更改打印机,否则此工作簿的视图会变得一团糟。单元格 B27 位于一个表格中,该表格会根据所使用的计算机自动调整 B27 结果。

Private Sub Workbook_Open()

    On Error Resume Next

    Application.EnableEvents = False

    Dim bFileSaveAs As Boolean
    bFileSaveAs = Application.Dialogs(xlDialogSaveAs).Show
    
    Application.EnableEvents = True
    
    Application.ActivePrinter = Sheet3.Range("B27").Value
    Application.EnableEvents = True
    Application.SendKeys "{Escape}", True
    Application.SendKeys "{NUMLOCK}", True
        
End Sub

标签: excelvba

解决方案


据我所知,问题是您需要在活动打印机语句中包含打印机使用的端口。这是一个有用的链接:

https://www.mrexcel.com/board/threads/changeing-the-active-printer-in-a-macro.1021932/

我进行了测试以确保使用 Microsoft Print to PDF 作为打印机。我将用于从模块中的链接查找打印机的代码放在我的 VBA 代码上方(由于开头的私有声明)。我将实际查找打印机的功能放在一个按钮上:

Private Sub CommandButton2_Click()
    ShowPrintersAndPorts
End Sub

返回的是

“NE01 上的 Microsoft 打印到 PDF:”

我把它放在你使用的单元格中并运行你的代码,一切都很完美。需要注意的主要一点是,您必须将端口放在来自 B27 的值的末尾。一旦你知道端口是什么样的,你就可以通过代码来做到这一点:

    Application.ActivePrinter = Sheet3.Range("B27").Value & " on NE01:"

当然,您必须将 NE01: 替换为您的打印机正在使用的端口。希望这可以帮助!


推荐阅读