2012-01-26 114 views
1

我需要執行的步驟是重複的,但我不確定如何遍歷每個工作簿,然後遍歷每個工作表。Excel宏:遍歷工作簿並打印每個工作簿中的單個工作表

我的任務是:

  1. 查找一個文件夾中(來源:文件夾)
  2. 迭代通過該文件夾(源文件),每個工作簿每4個工作表
  3. 打印(表名稱)在每個工作簿中添加到PostScript打印機(打印機名稱/路徑)。
  4. 名稱印刷到文件PS文件=源文件+表名稱放置在最終的文件夾(目的地文件夾)
  5. 原始工作簿關閉,不保存
  6. 最後的PS輸出文件。

我搜索了迭代VBA /宏,並看到了一些想法,但我不確定代碼在工作簿和工作表中工作時的外觀。

此外,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 

道歉時,我沒有張貼這張貼昨晚。它在做什麼似乎很長時間。我認爲它可以更精細一點,所以它更通用,可以指向任何工作簿和任意數量的工作表。

並非所有工作表都具有Specific_Sheet_Name,所以我想遍歷而不參考名稱。

+0

@Jmax:不要發佈代碼的道歉。我已經添加了上面的內容。 – RocketGoal

+0

@Mike,你實際上是爲每張紙使用不同的打印機嗎?如果沒有,那麼你只需要設置'Application.ActivePrinter'一次。此外,在更改之前應先保存「ActivePrinter」的值,然後在完成後重置(或發生錯誤)。 –

+0

@哈里。保存活動打印機的值?我通過錄制宏來找到活動打印機的值,然後粘貼適當的值。你如何保存/重置它?爲什麼? – RocketGoal

回答

3

通過使用FolderFile對象,可以使用FileSystemObject迭代文件夾中的工作簿。 (請記住添加對Microsoft Scripting Runtime的引用)

遍歷工作表與在Workbook.Sheets集合上的For Each一樣簡單。

最後,您可以在每張工作表上使用PrintOut方法打印工作表以打印它們。只要確保將PrintToFile參數設置爲true即可。

如果您需要更多的指導,我建議遵循@ JMax的建議併發布一些您已經嘗試過的建議。

UPDATE

要通過工作簿使用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 

請記住,這沒有任何錯誤處理,但我希望它有幫助。

+0

感謝您的評論。不確定文件和文件夾對象如何包含在上面的代碼中。正如你所看到的,我的代碼非常基礎。 – RocketGoal

+0

謝謝。這給了我適當的攻擊這個小項目的框架。非常感激。 – RocketGoal

相關問題