Excel宏:遍历工作簿并从每个工作簿打印单独的工作表
我需要执行的步骤是重复的,但我不确定如何遍历每个工作簿,然后遍历每个工作表 我的任务是:Excel宏:遍历工作簿并从每个工作簿打印单独的工作表,excel,vba,iteration,Excel,Vba,Iteration,我需要执行的步骤是重复的,但我不确定如何遍历每个工作簿,然后遍历每个工作表 我的任务是: 查找文件夹:(源文件夹) 遍历该文件夹(源文件)中的每个工作簿 将每个工作簿中的4张工作表(工作表名称)中的每一张打印到PostScript打印机(打印机名称/路径) 将打印到的文件命名为PS文件=源文件+图纸名称 放置在最终文件夹(目标文件夹)中的最终PS输出文件 原始工作簿已关闭且未保存 我搜索了迭代VBA/Macro并看到了一些想法,但我不确定代码在工作手册和工作表中运行时的外观 此外,PS打印机通过
Sub Make_PS_Files()
Dim path2 As String, path3 As String
path2 = "Drive:\Source folder\"
path3 = " Drive:\Destination folder\"
Workbooks.Open Filename:=path2 + "File_Name.XLS"
Sheets("Specific_Sheet_Name1").Activate
Application.ActivePrinter = "\\PRINTER NAME\LOCATION:"
ActiveWindow.SelectedSheets.PrintOut copies:=1, PrintToFile:=True, Collate _
:=True, Prtofilename:=True
ActiveSheet.PrintOut copies:=1, Prtofilename:=path3 + " Specific_Sheet_Name1.ps"
Sheets("Specific_Sheet_Name2").Activate
Application.ActivePrinter = "\\VS PRINTER NAME\LOCATION:"
ActiveWindow.SelectedSheets.PrintOut copies:=1, PrintToFile:=True, Collate _
:=True, Prtofilename:=True
ActiveSheet.PrintOut copies:=1, Prtofilename:=path3 + " Specific_Sheet_Name2.ps"
Sheets("Specific_Sheet_Name3").Activate
Application.ActivePrinter = "\\ PRINTER NAME\LOCATION:"
ActiveWindow.SelectedSheets.PrintOut copies:=1, PrintToFile:=True, Collate _
:=True, Prtofilename:=True
ActiveSheet.PrintOut copies:=1, Prtofilename:=path3 + " Specific_Sheet_Name3.ps"
ActiveWorkbook.Close
Sheets("Specific_Sheet_Name4").Activate
Application.ActivePrinter = "\\ PRINTER NAME\LOCATION:"
ActiveWindow.SelectedSheets.PrintOut copies:=1, PrintToFile:=True, Collate _
:=True, Prtofilename:=True
ActiveSheet.PrintOut copies:=1, Prtofilename:=path3 + " Specific_Sheet_Name4.ps"
ActiveWorkbook.Close
End Sub
抱歉昨晚我发邮件时没有发这个。对它正在做的事情来说似乎很冗长。我认为它可以再打磨一点,这样它就更通用,可以指向任何工作簿和任何数量的工作表
并非所有工作表都有特定的工作表名称,因此我希望在不参考名称的情况下进行迭代。您可以使用和对象在文件夹中的工作簿中进行迭代。(请记住添加对
Microsoft脚本运行时的引用
)
迭代工作表就像在工作簿.Sheets
集合中对每个进行一样简单
最后,您可以使用每个工作表上的方法打印工作表以打印它们。只需确保将PrintToFile
参数设置为true
如果您需要更多的指导,我建议您遵循@JMax的建议,并发布一些您已经尝试过的内容
更新
要使用FileSystemObject
遍历工作簿,请执行以下操作:
Sub Make_PS_Files()
Dim fso As New Scripting.FileSystemObject
Dim source As Scripting.Folder
Dim wbFile As Scripting.File
Dim book As Excel.Workbook
Set source = fso.GetFolder("Drive:\Source folder\")
For Each wbFile In source.Files
If fso.GetExtensionName(wbFile.Name) = "xls" Then
Set book = Workbooks.Open(wbFile.Path)
' Print out the workbook
End If
Next
End Sub
以及在工作簿中的工作表中进行迭代:
Dim sheet As Excel.Worksheet
For Each sheet in book.Sheets
sheet.PrintOut Copies:=1, ActivePrinter:="\\Printer:", PrintToFile:=True, _
PrToFileName:=fso.BuildPath(destination, sheet.Name & ".ps")
Next
请记住,这没有错误处理,但我希望它能有所帮助。谢谢您的评论。不确定上述代码中如何包含文件和文件夹对象。正如你所看到的,我的代码非常基本。谢谢。这给了我一个框架来恰当地攻击这个小项目。非常感谢。@Jmax:为没有发布代码而道歉。我已经添加了上面的内容。@Mike,你真的在每张纸上使用不同的打印机吗?如果没有,则只需设置一次Application.ActivePrinter
。此外,您应该在更改前保存ActivePrinter
的值,然后在完成后(或发生错误时)重置该值。@Harry。是否保存活动打印机的值?我通过录制一个宏,然后粘贴适当的值,找到了活动打印机的值。如何保存/重置它?为什么呢?@Mike你可以通过将它的值存储在变量中来保存它。如果您选择的打印机不是用户的默认打印机,如果他们尝试在Excel实例中手动打印,他们会感到惊讶。它将使用您选择的系统默认值,而不是使用它们的系统默认值。@Harry。谢谢我会调查一下,试试看。