将特定工作表的variables数组打印到单个打印输出

我想从我的Excel工作簿打印特定的工作表到一个打印输出。 我的工作簿中还有其他的表格不能打印。

要打印的第一张工作表的名称将是常量(“配方”)。 要打印的其他工作表的名称会有所不同(它们都将具有前缀“Pie”和不同的后缀)。 要打印的页数将因项目而异。

例如,
在项目#1中,工作簿将包括以下工作表:“配方”,“馅饼 – 苹果”,“馅饼 – 南瓜”,“配料”和“工具”。

在项目#2中,工作簿将包括以下工作表:“食谱”,“馅饼 – 蛋糕”,“馅饼 – 苹果”,“馅饼 – 石灰”,“馅饼 – 蓝莓”,“配料”和“工具”。

我想将“食谱”工作表和每个以“派”开头的工作表打印到单个打印输出。 下面的代码允许我将所需的工作表单元化,同时清除其余的部分:

Sub PrintArrayOfWorksheets() Dim PrintCollection PrintCollection = Array("Recipe", "Pie - Apple", "Pie - Pumpkin") ThisWorkbook.Worksheets(PrintCollection).PrintOut End Sub 

这个代码的作品; 但是,它需要我手动input每个项目的数组元素。 请推荐一种自动更新数组的方法,以包含符合上述条件的工作表。 或者,请完全推荐一些其他方法。

我已经尝试了几个不同的不成功的想法,如果要求,我可以分享这些想法。

亲切的问候,
托尼

我已经在你的代码中添加了一段代码,用符合要求的表格名称dynamic地填充你的数组。

 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 

你是这个意思吗?

 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