我需要打印 20 份单独的 Word 文档。我不想打开每份文档并单击打印。
我可以以某种方式一次性打印所有内容吗?
答案1
在 Windows 中,您可以选择多个文件,右键单击并选择打印,它将打印您选择的所有内容
然而,经我测试,它每次只能处理最多 15 个文档(我猜是为了防止因打印错误的文件夹而造成意外灾难。)
答案2
我认为这不仅仅是一次性的需求(否则您可以使用 Windows UI 选择多个文档,右键单击并选择打印)。
宏可以接受吗?以下是从宏打开和打印 Word 文档所需的基本代码:
Sub PrintDocMacro()
Dim objWord As Object
Set objWord = CreateObject("Word.application") 'Start app
objWord.Documents.Open FileName:="c:\Temp\test.docx" 'Open doc
objWord.Visible = True
objWord.Application.PrintOut 'Print doc
objWord.ActiveDocument.Close savechanges:=True 'close & save doc
objWord.Application.Quit 'Close app
Set objWord = Nothing
End Sub
我们需要编写一个循环来打印所有想要的文档。如果要打印的文档是给定文件夹中的所有文档,我们也可以这样做。微软有示例代码用于读取目录。
如果您出于某种原因想要按计划打印这些内容,我想您可以让包含宏的文件使用 AutoOpen 运行它,甚至在完成后关闭,然后只需安排通过任务计划程序打开启用宏的文件即可。
答案3
我意识到这是一个老问题,但我没有看到我在这里使用的答案。
您可以使用 Windows 资源管理器外壳中的右键单击选项来打印多个文档。通常,最多可打印 15 个文档;但是,可以在注册表中更改该限制。以下是需要修改为所需限制的值:
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer
Name : MultipleInvokePromptMinimum
Type : DWORD
Default : 15 (decimal)
希望这可以让某些人免去使用宏的麻烦。
答案4
这是一个宏,可让您指定一个文件夹,它将打印该文件夹内的所有 word 文件(包括子文件夹)。
Public optionCancel
Sub Print_word_files()
Dim path
Dim reminder As Integer
Dim oExtension As String
Dim Fso, oFolder, oSubfolder, oFile, queue As Collection
On Error Resume Next
path = " " //######################put files path here (ex: c:\users\myFiles) ################
If optionCancel = "yes" Then
optionCancel = "No"
Exit Sub
End If
reminder = MsgBox("Are you sure you want to print these files?", 4, "WARNING !!")
If reminder = 6 Then 'If Yes is clicked
Set Fso = CreateObject("Scripting.FileSystemObject")
Set queue = New Collection
queue.Add Fso.GetFolder(path) 'The path
Do While queue.Count > 0
Set oFolder = queue(1)
queue.Remove 1 'dequeue
'...insert any <<folder>> processing code here...
For Each oSubfolder In oFolder.subfolders
queue.Add oSubfolder 'enqueue
Next oSubfolder
For Each oFile In oFolder.Files
oExtension = Right(oFile, Len(oFile) - InStrRev(oFile, ".", -1)) 'gets the file extension
If oExtension = "docx" Or oExtension = "DOCX" Or oExtension = "doc" Or oExtension = "DOC" Or oExtension = "docm" Or oExtension = "DOCM" Or oExtension = "rtf" Or oExtension = "RTF" Then
Documents.Open FileName:=(oFile)
'-------------------The required starts here
ActiveDocument.PrintOut 'Prints document
ActiveDocument.Saved = True 'to prevent asking to save
ActiveDocument.Close 'Closes document
'-------------------The required ends here
End If
Next oFile
Loop
Else
MsgBox ("Operation cancelled!!")
End If
End Sub