我想将Excel工作簿中的特定工作表打印到单个打印输出中。我的工作簿中还有其他不应打印的工作表。
要打印的第一个工作表的名称将是常量(“Recipe”)。要打印的其他工作表的名称会有所不同(它们都有前缀“Pie”和不同的后缀)。要打印的页数因项目而异。
例如,
在项目#1中,工作簿将包括以下工作表:“食谱”,“馅饼 - 苹果”,“馅饼 - 南瓜”,“成分”和“工具”。
在项目#2中,工作簿将包括以下工作表:“Recipe”,“Pie - Custard”,“Pie - Apple”,“Pie - Key Lime”,“Pie - Blueberry”,“Ingredients”和“工具”。
我想将“Recipe”工作表和以“Pie”开头的每个工作表打印到单个打印输出中。以下代码允许我将所需的工作表单元化,同时清除其余的工作表:
Sub PrintArrayOfWorksheets()
Dim PrintCollection
PrintCollection = Array("Recipe", "Pie - Apple", "Pie - Pumpkin")
ThisWorkbook.Worksheets(PrintCollection).PrintOut
End Sub
此代码有效;但是,它需要我为每个项目手动输入数组的元素。请推荐一种自动更新阵列的方法,以包含符合上述条件的工作表。或者,请完整推荐一些其他方法。
我尝试了几种不同的不成功的想法,如果需要我可以分享。
亲切的问候,
贝
答案 0 :(得分:1)
你的意思是这样吗?
Option Explicit
Sub Sample()
Dim ws As Worksheet
Dim MyAr
Dim sName As String
For Each ws In ThisWorkbook.Worksheets
If ws.Name = "Recipe" Or UCase(Left(ws.Name, 3)) = "PIE" Then
If sName = "" Then
sName = ws.Name
Else
sName = sName & "\" & ws.Name
End If
End If
If sName <> "" Then
MyAr = Split(sName, "\")
End If
Next ws
ThisWorkbook.Worksheets(MyAr).PrintOut
End Sub
答案 1 :(得分:1)
我已在您的代码中添加了一段代码,可以使用符合要求的工作表名称动态填充数组。
Sub PrintArrayOfWorksheets()
Dim PrintCollection() As String
Dim WS As Worksheet
Dim i As Integer
ReDim PrintCollection(0 To 0)
i = 0
'Dynamically populates array
For Each WS In ActiveWorkbook.Worksheets
If LCase(WS.Name) = "recipe" Or LCase(Left(WS.Name, 3)) = "pie" Then
ReDim Preserve PrintCollection(0 To i)
PrintCollection(UBound(PrintCollection)) = WS.Name
i = i + 1
End If
Next
ThisWorkbook.Worksheets(PrintCollection).PrintOut
End Sub