gpt4 book ai didi

vba - 如何在没有 "on XXXX:"的情况下将事件打印机设置为 microsoft print to pdf

转载 作者:行者123 更新时间:2023-12-02 18:22:47 25 4
gpt4 key购买 nike

我需要将打印机设置为“Microsoft Print to PDF”,但我如何知道它将位于哪个端口?在另一台机器上可能会有所不同。我需要它能够在不知道端口“on XXXX:”部分的情况下进行设置,如下所示:

Application.activeprinter = "Microsoft Print to PDF"

如有任何帮助,我们将不胜感激。谢谢

?ActivePrinter 'show active printer "XXXXXX on XXXX:" 

最佳答案

  1. 最简单的方法:

尝试在上述打印机上从 Excel 手动打印(任何内容)。

然后使用下一个代码行:Debug.Print Application.ActivePrinter。它将在立即窗口中返回打印机名称字符串(包括端口),以便在将其设置为事件状态时使用。

  • 下一个代码返回打印机及其端口,以打印机名称作为参数进行调用:
  • Function FindPrinter(ByVal PrinterName As String) As String
    Dim arrH, Pr, Printers, Printer As String
    Dim RegObj As Object, RegValue As String
    Const HKEY_CURRENT_USER = &H80000001

    Set RegObj = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
    RegObj.Enumvalues HKEY_CURRENT_USER, "Software\Microsoft\Windows NT\CurrentVersion\Devices", Printers, arrH

    For Each Pr In Printers
    RegObj.getstringvalue HKEY_CURRENT_USER, "Software\Microsoft\Windows NT\CurrentVersion\Devices", Pr, RegValue
    Printer = Pr & " on " & Split(RegValue, ",")(1)
    If InStr(1, Printer, PrinterName, vbTextCompare) > 0 Then
    FindPrinter = Printer
    Exit Function
    End If
    Next
    End Function

    可以通过以下方式调用:

    Sub testFindPrinter()
    Debug.Print Application.ActivePrinter
    Debug.Print FindPrinter("Microsoft Print to PDF")
    End Sub

    或者,简单地通过以下方式设置事件打印机:

    Application.ActivePrinter = FindPrinter("Microsoft Print to PDF")

    已编辑:

    我不知道打印机端口之前的后缀应该/可以区域化。感谢@T.M.我现在知道了。在这种情况下,可以使用此后缀字符串提取的下一个方法来更新该函数:

       Dim suff As String, arrSuff
    arrSuff = Split(Application.ActivePrinter, " ")
    suff = arrSuff(UBound(arrSuff) - 1)

    关于vba - 如何在没有 "on XXXX:"的情况下将事件打印机设置为 microsoft print to pdf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70656341/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com