0

我想将 Excel 工作簿中的特定工作表打印到单个打印输出中。我的工作簿中有其他不应打印的工作表。

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

例如,
在项目 #1 中,工作簿将包括以下工作表:“食谱”、“派 - 苹果”、“派 - 南瓜”、“成分”和“工具”。

在项目 #2 中,工作簿将包括以下工作表:“食谱”、“馅饼 - 蛋羹”、“馅饼 - 苹果”、“馅饼 - 酸橙”、“馅饼 - 蓝莓”、“配料”和“工具”。

我想将“食谱”工作表和以“派”开头的每个工作表打印到单个打印输出中。以下代码允许我在清除其余工作表的同时统一所需的工作表:

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

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

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

亲切的问候,
托尼

4

2 回答 2

3

我在您的代码中添加了一段代码,该代码使用符合要求的工作表名称动态填充您的数组。

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
于 2013-11-13T20:15:13.173 回答
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
于 2013-11-13T19:41:20.217 回答