Board logo

标题: [问题求助] vbs批量打印word文档 [打印本页]

作者: jackm    时间: 2015-5-10 20:30     标题: vbs批量打印word文档

用vbs编写一个批量打印文件夹内所有word文档,用到printout函数,怎么设置要打印的页码范围?比如:
AppObj.PrintOut Pages=input_pages, Copies=input_copies
pages参数好像没什么作用!
希望大神们赐教
作者: yu2n    时间: 2015-5-10 21:42

Word 开发人员参考
Application.PrintOut 方法
打印指定文档的全部或部分内容。
语法

表达式.PrintOut(Background, Append, Range, OutputFileName, From, To, Item, Copies, Pages, PageType, PrintToFile, Collate, FileName, ActivePrinterMacGX, ManualDuplexPrint, PrintZoomColumn, PrintZoomRow, PrintZoomPaperWidth, PrintZoomPaperHeight)

表达式   必选。一个代表 Application 对象的变量。

参数

名称 必选/可选 数据类型 描述
Background 可选 Variant 如果将该属性设置为 True,则 Microsoft Word 在打印文档时继续运行宏。
Append 可选 Variant 如果将该属性设置为 True,则将指定文档附加到 OutputFileName 参数所指定的文件名。如果将该属性设置为 False,则覆盖 OutputFileName 参数所指定文件的内容。
Range 可选 Variant 页码范围。可以是任意 WdPrintOutRange 常量。
OutputFileName 可选 Variant 如果 PrintToFile 为 True,则该参数指定输出文件的路径和文件名。
From 可选 Variant 如果将 Range 设置为 wdPrintFromTo,则该参数指定起始页码。
To 可选 Variant 如果将 Range 设置为 wdPrintFromTo,则该参数指定结束页码。
Item 可选 Variant 要打印的项目。可以是任意 WdPrintOutItem 常量。
Copies 可选 Variant 要打印的份数。
Pages 可选 Variant 要打印的页码和页码范围,中间用逗号分开。例如,“2, 6-10”表示打印第 2 页以及第 6 至第 10 页。
PageType 可选 Variant 要打印的页面类型。可以是任意 WdPrintOutPages 常量。
PrintToFile 可选 Variant 如果该属性值为 True,则将打印指令发送到文件。请确保使用 OutputFileName 指定文件名。
Collate 可选 Variant 在打印文档的多份副本时,如果该属性值为 True,则完成打印所有页面后再打印下一份副本。
FileName 可选 Variant 要打印的文档的路径和文件名。如果省略该参数,Word 将打印活动文档(仅应用于 Application 对象)。
ActivePrinterMacGX 可选 Variant 该参数仅适用于 Microsoft Office Macintosh Edition。有关该参数的其他信息,请参阅 Microsoft Office Macintosh Edition 附带的语言参考帮助。
ManualDuplexPrint 可选 Variant 如果该属性值为 True,则在无双面打印组件的打印机上打印双面文档。如果该属性值为 True,则忽略 PrintBackground 和 PrintReverse 属性。使用 PrintOddPagesInAscendingOrder 和 PrintEvenPagesInAscendingOrder 属性可在手动双面打印时控制输出。由于选择或安装的语言支持(如美国英语)不同,该参数可能不可用。
PrintZoomColumn 可选 Variant 表示 Word 在一页纸上水平放置的页数。可以是 1、2、3 或 4 页。与 PrintZoomRow 参数一同使用可在单张纸上打印多页文档。
PrintZoomRow 可选 Variant 表示 Word 在一页纸上垂直放置的页数。可以是 1、2 或 4 页。与 PrintZoomColumn 参数一同使用可在单张纸上打印多页文档。
PrintZoomPaperWidth 可选 Variant Word 将打印页面缩放到的宽度,以缇为单位(20 缇 = 1 磅;72 磅 = 1 英寸)。
PrintZoomPaperHeight 可选 Variant Word 将打印页面缩放到的高度,以缇为单位(20 缇 = 1 磅;72 磅 = 1 英寸)。

示例


本示例打印活动文档的当前页面。

Visual Basic for Applications
ActiveDocument.PrintOut Range:=wdPrintCurrentPage

本示例打印当前文件夹中的所有文档。Dir 函数用于返回所有扩展名为“.doc”的文件名。

Visual Basic for Applications
adoc = Dir("*.DOC")
Do While adoc <> ""
    Application.PrintOut FileName:=adoc
    adoc = Dir()
Loop

本示例打印活动窗口中文档的前三页。

Visual Basic for Applications
ActiveDocument.ActiveWindow.PrintOut _
    Range:=wdPrintFromTo, From:="1", To:="3"

本示例打印活动文档中的备注。

Visual Basic for Applications
If ActiveDocument.Comments.Count >= 1 Then
    ActiveDocument.PrintOut Item:=wdPrintComments
End If

本示例将打印活动文档,每张纸上打印六页文档。

Visual Basic for Applications
ActiveDocument.PrintOut PrintZoomColumn:=3, _
    PrintZoomRow:=2

本示例按实际尺寸的 75% 打印活动文档。

Visual Basic for Applications
ActiveDocument.PrintOut _
    PrintZoomPaperWidth:=0.75 * (8.5 * 1440), _
    PrintZoomPaperHeight:=0.75 * (11 * 1440)


© 2006 Microsoft Corporation。保留所有权利。


录制宏自然就知道VBA代码怎么写,以下录制宏为选择打印 1,3,5-7 页。
  1. Sub 宏1()
  2. '
  3. ' 宏1 宏
  4. '
  5. '
  6.     ActivePrinter = "Foxit Phantom Printer"
  7.     Application.PrintOut FileName:="", Range:=wdPrintRangeOfPages, Item:= _
  8.         wdPrintDocumentContent, Copies:=1, Pages:="1,3,5-7", PageType:= _
  9.         wdPrintAllPages, ManualDuplexPrint:=False, Collate:=True, Background:= _
  10.         True, PrintToFile:=False, PrintZoomColumn:=0, PrintZoomRow:=0, _
  11.         PrintZoomPaperWidth:=0, PrintZoomPaperHeight:=0
  12. End Sub
复制代码

作者: jackm    时间: 2015-5-11 12:17

回复 2# yu2n


    非常感谢你的答复,但是我用vbs批量打印word档的部分页,代码如下:
  1. input_pages = InputBox("要打印的页码和页码范围。例如:2, 6-10。表示打印第 2 页以及第 6 至第 10 页","word批量打印@徐飞专用版","整个文档")
  2. input_copies = InputBox("每个文档要打印的份数:","word批量打印@徐飞专用版","1")
  3. APP = "Word"
  4. Print_Dir App, SelectFolder
  5. Sub Print_Dir(APP,FolderPath)
  6. '本过程用于遍历目录下的文件,并打印
  7.   Set fso = CreateObject("Scripting.FileSystemObject")
  8.   Set AppObj = CreateObject(APP & ".Application")
  9.   xxx1 = "doc" : xxx2 = "docx"
  10.   AppObj.Visible =  0 :coun = 0
  11.   If fso.FolderExists(FolderPath) Then
  12.     Set Folder = fso.GetFolder(FolderPath)
  13.     Set Files = Folder.Files
  14.     fileNums = Files.Count
  15.     time1 = Time
  16.     For Each File In Folder.Files
  17.       
  18.       If right(File.name,3)= xxx1 Or right(File.name,4)= xxx2   then
  19.         AppObj.Documents.Open(FolderPath & "\"& File.Name)
  20. AppObj.Windows(1).Activate
  21.           If input_pages = "整个文档" then
  22.     AppObj.PrintOut ,,,,,,,input_copies
  23.     AppObj.Documents(1).Close False
  24.     coun = coun +1
  25.           Else
  26.             AppObj.PrintOut ,,,,,,,input_copies,input_pages
  27.     AppObj.Documents.Close False
  28.     coun = coun +1
  29.   End if
  30.       End if
  31.   Next
  32.   time2 = Time
  33.   MsgBox "共有文件" & fileNums & "个,打印文件" & coun & "个" & vbCrLf & "用时: " & DateDiff("s", time1, time2) & "秒"
  34.   End if
  35.   AppObj.Quit: Set AppObj = Nothing :Set fso = Nothing
  36. End Sub
  37. Function SelectFolder()
  38.   Const WINDOW_HANDLE = 0
  39.   Const OPTIONS = &H10
  40.   Set objShell = CreateObject("Shell.Application")
  41.   Set objFolder = objShell.BrowseForFolder _
  42.       (WINDOW_HANDLE, "请选择你要打印的文件夹:", OPTIONS , "0")
  43.   If objFolder Is Nothing Then
  44.     Wscript.Quit
  45.   End if
  46.   Set objFolderItem = objFolder.Self
  47.     SelectFolder = objFolderItem.Path
  48.   Set objShell = nothing
  49. End Function
复制代码
运行后,输入打印要打印的页码,比如5-10,但打印的仍是整个文档。希望您为赐教,不胜感谢。




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2