2009-04-22 87 views
2

我有一個Excel 2007電子表格,我想寫一個VBA過程以按名稱打印特定的工作表。我該怎麼做呢?按名稱打印Excel工作表

例如, 我想打印類似於以下"FirstSheet","ThirdSheet","FourthSheet"但不"SecondSheet".

回答

0

的東西應該工作:

Dim sh As Worksheet 
For Each sh In ActiveWorkbook.Worksheets 
     If (sh.Name = "Sheet1") Then 
      sh.PrintOut 
     End If 
Next sh 
+0

這可以在一個批處理來完成?例如我可以在單個打印作業中打印多張紙嗎? – Caveatrob 2009-04-22 19:46:41

1
Public Sub PrintByName(Names As Variant) 

    Dim s As Worksheet 
    Dim i As Integer 

    If IsArray(Names) Then 
    For Each s In ActiveWorkbook.Worksheets 
     For i = 0 To UBound(Names) 
     If StrComp(s.Name, Names(i), vbTextCompare) = 0 Then 
      s.PrintOut 
     End If 
     Next i 
    Next s 
    End If 

End Sub 

調用,比如:

PrintByName Array("FirstSheet", "ThirdSheet", "FourthSheet") 

嵌套lo關於運行時性能,op並不是最優的。由於Excel工作簿可以包含的頁數有限,我認爲這可以忽略不計。但是,使用Collection來包含所需的圖紙名稱而不是Array會更好。

+1

您是否認爲在任何情況下指責*和*同時侮辱他人都有幫助? – Tomalak 2009-04-22 17:53:49

5

如果你知道表名稱只需調用PrintOut功能是這樣的:

Sheets("Name").PrintOut 

對於少量的紙張是通過這種方式很容易的多!

1

不需要循環來做到這一點,一行代碼就足夠了:

Sheets(Array("FirstSheet", "ThirdSheet", "FourthSheet")).PrintOut Copies:=1