Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 从列表中选择默认打印机,而不是硬编码_Excel_Vba_Printing - Fatal编程技术网

Excel 从列表中选择默认打印机,而不是硬编码

Excel 从列表中选择默认打印机,而不是硬编码,excel,vba,printing,Excel,Vba,Printing,我目前有一个用于批量打印的宏。它工作得很好;但是,通过使用以下代码设置默认打印机,打印选项是硬编码的 CreateObjectWScript.Network.SetDefaultPrinter\\vs dc.CCC.internal\RICOH MPC3503-办公室第二层Flr WKRM 是否有人知道如何打开一个包含网络上所有打印机选项的对话框,以便任何人都可以使用?它不必将默认值设置回原始值,但如果设置了,那将是一个绝对的加号 我的想法是让表单将您选择的打印机设置为Selected prin

我目前有一个用于批量打印的宏。它工作得很好;但是,通过使用以下代码设置默认打印机,打印选项是硬编码的

CreateObjectWScript.Network.SetDefaultPrinter\\vs dc.CCC.internal\RICOH MPC3503-办公室第二层Flr WKRM

是否有人知道如何打开一个包含网络上所有打印机选项的对话框,以便任何人都可以使用?它不必将默认值设置回原始值,但如果设置了,那将是一个绝对的加号

我的想法是让表单将您选择的打印机设置为Selected printer=ChosenPrinter,然后使用它

CreateObjectWSScript.Network.SetDefaultPrinter选择打印机

我还了解了如何使用以下命令将其设置回原始默认值:

ActivePrinter=OrigPrinter,完成后将其设置回该值

如果有人知道如何将所有这些结合在一起,那将是令人惊奇的。如果有必要,我将在下面包含完整的代码

Sub GetFiles(StartFolder As String, Pattern As String, _
         DoSubfolders As Boolean, ByRef colFiles As Collection)

Dim f As String, sf As String, subF As New Collection, s

If Right(StartFolder, 1) <> "\" Then StartFolder = StartFolder & "\"

f = Dir(StartFolder & Pattern)
Do While Len(f) > 0
    colFiles.Add StartFolder & f
    f = Dir()
Loop

sf = Dir(StartFolder, vbDirectory)
Do While Len(sf) > 0
    If sf <> "." And sf <> ".." Then
        If (GetAttr(StartFolder & sf) And vbDirectory) <> 0 Then
                subF.Add StartFolder & sf
        End If
    End If
    sf = Dir()
Loop

For Each s In subF
    GetFiles CStr(s), Pattern, True, colFiles
Next s

End Sub

如果您是从Excel打印,只需使用

Application.Dialogs(xlDialogPrinterSetup).Show
让用户按照Tim Williams的建议,在宏的开头选择Excel的活动打印机

如您所述,这不会更改Windows的默认打印机,因为活动打印机只是Excel应用程序的本地设置

由于您在代码中提到程序/函数PrintFile使用默认打印机,因此您可以在设置ActivePrinter之后立即使用以下方法设置默认打印机:

CreateObject("WScript.Network").SetDefaultPrinter Left(ActivePrinter, Len(ActivePrinter) - 9)

请注意,我们需要从ActivePrinter字符串中删除最后9个字符,因为ActivePrinter包含有关打印机端口号的信息,该信息在Ne:。这可能会引起兴趣:Application.DialogsxlDialogPrinterSetup.Show可能适合您我尝试过使用上述解决方案,但由于我有一个集合,它可能适合您显示集合中正在打印的每个项目。如果有一种方法只需按下一次,那么它对我来说是可行的,但我想不出哪种解决方案?听起来@TimWilliams提出的解决方案适合您,因为xlDialogPrinterSetup对话框将设置活动打印机,因此如果您愿意,您可以让用户在开始时选择一次活动打印机;但是,集合仍打印到“默认”打印机,而不是“活动”打印机。至少我是这样做的。我实际上刚刚尝试过这个,当我按那个顺序使用它时,它会在CreateObjectWScript.Network.SetDefaultPrinter-ActivePrinter行中抛出一个错误,我不明白为什么不是这样working@JoshL–你说得对,你需要做一个小小的调整才能让这一切顺利进行。我编辑了我的答案以反映这一点。
CreateObject("WScript.Network").SetDefaultPrinter Left(ActivePrinter, Len(ActivePrinter) - 9)