【发布时间】:2020-08-13 15:51:39
【问题描述】:
我目前有一个用于批量打印的宏。它完美地工作;但是,打印选项是通过使用以下代码设置默认打印机来硬编码的。
CreateObject("WScript.Network").SetDefaultPrinter "\\vs-dc.CCC.internal\RICOH MPC3503 - Office 2nd Flr WKRM"
有没有人知道一种方法可以打开一个包含网络上所有打印机选项的对话框,以便任何人都可以使用它?它不必将默认设置恢复为原始设置,但如果这样做,那将是一个绝对的优势。
我的想法是让表单以某种方式将您选择的打印机设置为 Selected printer = ChosenPrinter,然后使用它。
CreateObject("WScript.Network").SetDefaultPrinter ChosenPrinter
我还看到了如何使用以下方法将其设置回原始默认值:
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
.
Sub BatchPrint()
Dim colFiles As New Collection
Dim CustRow, LastRow As Long
Set colFiles = New Collection
CreateObject("WScript.Network").SetDefaultPrinter "\\vs-dc.CCC.internal\RICOH MPC3503 - Office 2nd Flr WKRM"
LastRow = Sheet1.Range("B9999").End(xlUp).Row
Dim countFiles As Integer 'Storing the number of files found
With Sheet1
For CustRow = 3 To LastRow
countFiles = colFiles.Count
GetFiles "C:\Users\Desktop\Test\", Sheet1.Range("B" & CustRow) & ".pdf", True, colFiles
If countFiles = colFiles.Count Then
Sheet1.Range("B" & CustRow).Interior.ColorIndex = 3
End If
Next CustRow
End With
Dim i As Long
For i = 1 To colFiles.Count
Debug.Print colFiles(i)
PrintFile (colFiles(i))
Next i
Set colFiles = Nothing
End Sub
【问题讨论】:
-
Application.Dialogs(xlDialogPrinterSetup).Show可能对你有用 -
我尝试使用上面的解决方案,但由于我有一个集合,它会显示在集合中打印的每个项目。如果有一种方法只需按一次,那么它对我有用,但我想不通
-
哪种解决方案?听起来@TimWilliams 提出的解决方案对您有用,因为
xlDialogPrinterSetup对话框将设置活动打印机,因此您可以让用户在开始时选择一次活动打印机。 -
xlDialogPrinterSetup 让我选择打印机;但是,该集合仍然打印到“默认”而不是“活动”打印机。至少这就是我正在发生的事情。