Board logo

标题: [问题求助] vbs批量打印word文档如何选择页码范围 [打印本页]

作者: jackm    时间: 2015-6-9 20:49     标题: vbs批量打印word文档如何选择页码范围

用VBS写了一个批量打印word文档,功能是批量打印文件夹内所有的word文档,并能选择打印的页码范围。代码中使用printout函数,它的参数起不了作用。代码如下:
  1. nput_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
复制代码
运行后,输入任何页码都是打印整个文档。求大神们不吝赐教。
作者: yu2n    时间: 2015-6-11 10:24

试试将31行改为:
  1. AppObj.PrintOut ,,4,,,,,input_copies,input_pages
复制代码
  1. WdPrintOutRange 列舉
  2. 會指定要列印的範圍。
  3. 名稱 值 描述
  4. wdPrintAllDocument 0 整個文件。
  5. wdPrintCurrentPage 2 目前頁面。
  6. wdPrintFromTo 3 指定的範圍。
  7. wdPrintRangeOfPages 4 指定的頁面範圍。
  8. wdPrintSelection 1 目前的選取範圍。
复制代码

  1. Word 開發人員參考資料
  2. Application.PrintOut 方法
  3. 列印全部或部分指定的文件。
  4. 語法
  5. 運算式.PrintOut(Background, Append, Range, OutputFileName, From, To, Item, Copies, Pages, PageType, PrintToFile, Collate, FileName, ActivePrinterMacGX, ManualDuplexPrint, PrintZoomColumn, PrintZoomRow, PrintZoomPaperWidth, PrintZoomPaperHeight)
  6. 運算式   必要。代表 Application 物件的變數。
  7. 參數
  8. 名稱 必要/選用 資料類型 描述
  9. Background 選用 Variant 設定為 True,可讓巨集在 Microsoft Word 列印文件時繼續執行。
  10. Append 選用 Variant 設定為 True,可將指定的文件附加至 OutputFileName 引數指定的檔案名稱。False 則是覆寫 OutputFileName 的內容。
  11. Range 選用 Variant 頁面範圍。它可以是任何 WdPrintOutRange 常數。
  12. OutputFileName 選用 Variant 如果 PrintToFile 是 True,這個引數就會指定輸出檔案的路徑和檔案名稱。
  13. From 選用 Variant 當 Range 設定為 wdPrintFromTo 時的起始頁碼。
  14. To 選用 Variant 當 Range 設定為 wdPrintFromTo 的結束頁碼。
  15. Item 選用 Variant 要列印的項目。它可以是任何 WdPrintOutItem 常數。
  16. Copies 選用 Variant 要列印的份數。
  17. Pages 選用 Variant 要列印的頁碼和頁面範圍,以逗號隔開。例如,"2, 6-10" 會就列印第 2 頁及第 6 至第 10 頁。
  18. PageType 選用 Variant 要列印的頁面類型。它可以是任何 WdPrintOutPages 常數。
  19. PrintToFile 選用 Variant True 是表示將印表機指令傳送至檔案。請務必使用 OutputFileName 指定檔案名稱。
  20. Collate 選用 Variant 當列印某份文件的多個複本時,若指定 True,將在列印下一個複本之前,先列印文件的所有頁面。
  21. FileName 選用 Variant 要列印之文件的路徑和檔案名稱。如果省略這個引數,Word 就會列印使用中文件 (僅適用於 Application 物件)。
  22. ActivePrinterMacGX 選用 Variant 這個引數只能在 Microsoft Office Macintosh Edition 中使用。如需這個引數的詳細資訊,請參考包含在 Microsoft Office Macintosh Edition 中的語言參照說明。
  23. ManualDuplexPrint 選用 Variant True 是表示在沒有雙面列印套件的印表機上列印雙面文件。如果這個引數為 True,就會略過 PrintBackground 和 PrintReverse 屬性。請使用 PrintOddPagesInAscendingOrder 和 PrintEvenPagesInAscendingOrder 屬性來控制手動雙面列印期間的輸出。此引數對您而言可能無效;有效與否,須視您所選取或安裝的語言支援 (例如:美式英文) 而定。
  24. PrintZoomColumn 選用 Variant 您想要 Word 在單一頁面上水平排列的頁數。它可以是 1、2、3 或 4。請搭配 PrintZoomRow 引數使用,以便在單一紙張上列印多重頁面。
  25. PrintZoomRow 選用 Variant 您想要 Word 在單一頁面上垂直排列的頁數。它可以是 1、2 或 4。請搭配 PrintZoomColumn 引數使用,以便在單一紙張上列印多重頁面。
  26. PrintZoomPaperWidth 選用 Variant 您想要 Word 調整列印頁面的寬度,以 Twip 為單位 (20 Twip = 1 點,72 點 = 1 英吋)。
  27. PrintZoomPaperHeight 選用 Variant 您想要 Word 調整列印頁面的高度,以 Twip 為單位 (20 Twip = 1 點,72 點 = 1 英吋)。
  28. 範例
  29. 這則範例會列印使用中文件的目前頁面。
  30. [Visual Basic for Applications]
  31. ActiveDocument.PrintOut Range:=wdPrintCurrentPage
  32. 這則範例會列印目前資料夾中的所有文件。Dir 函數是用來傳回具有副檔名 ".doc" 的所有檔案名稱。
  33. [Visual Basic for Applications]
  34. adoc = Dir("*.DOC")
  35. Do While adoc <> ""
  36.     Application.PrintOut FileName:=adoc
  37.     adoc = Dir()
  38. Loop
  39. 這則範例會列印使用中視窗內文件的前三頁。
  40. [Visual Basic for Applications]
  41. ActiveDocument.ActiveWindow.PrintOut _
  42.     Range:=wdPrintFromTo, From:="1", To:="3"
  43. 這則範例會列印使用中文件內的註解。
  44. [Visual Basic for Applications]
  45. If ActiveDocument.Comments.Count >= 1 Then
  46.     ActiveDocument.PrintOut Item:=wdPrintComments
  47. End If
  48. 這則範例會列印使用中文件,並在每一個紙張上排列六個頁面。
  49. [Visual Basic for Applications]
  50. ActiveDocument.PrintOut PrintZoomColumn:=3, _
  51.     PrintZoomRow:=2
  52. 這則範例會以實際大小的 75% 來列印使用中文件。
  53. [Visual Basic for Applications]
  54. ActiveDocument.PrintOut _
  55.     PrintZoomPaperWidth:=0.75 * (8.5 * 1440), _
  56.     PrintZoomPaperHeight:=0.75 * (11 * 1440)
  57. © 2006 Microsoft Corporation. All rights reserved.
复制代码





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