2009-04-22 89 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