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

时间:2013-11-13 19:30:17

标签: excel vba excel-vba

我想将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

此代码有效;但是,它需要我为每个项目手动输入数组的元素。请推荐一种自动更新阵列的方法,以包含符合上述条件的工作表。或者,请完整推荐一些其他方法。

我尝试了几种不同的不成功的想法,如果需要我可以分享。

亲切的问候,

2 个答案:

答案 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