Excel 如何打印一系列纸张?

Excel 如何打印一系列纸张?,excel,vba,Excel,Vba,我有一个VBA代码,它在表行项目汇总表7和比较工作表17之间添加了新的工作表,标记为成本核算表2、成本核算表3等。我不知道会添加多少张,这由用户决定 如何打印中间添加的图纸?基本上,我希望行项目总结加上任何成本计算表被打印,而不是比较工作只表到这一点 **编辑:下面的代码用于添加新图纸 Sub NewSheet() Worksheets("Costing Sheet").Copy After:=Worksheets("Line Item Summary") Worksheets(Workshe

我有一个VBA代码,它在表行项目汇总表7和比较工作表17之间添加了新的工作表,标记为成本核算表2、成本核算表3等。我不知道会添加多少张,这由用户决定

如何打印中间添加的图纸?基本上,我希望行项目总结加上任何成本计算表被打印,而不是比较工作只表到这一点

**编辑:下面的代码用于添加新图纸

Sub NewSheet()

Worksheets("Costing Sheet").Copy After:=Worksheets("Line Item Summary")
Worksheets(Worksheets("Costing Sheet").Index + 1).Activate

'Active Tab
ActiveSheet.Tab.ColorIndex = xlColorIndexNone

End Sub

按名称循环所有工作表,如果不是以您的2张工作表名称开头,则进行循环

Sub WorksheetLoop()

         Dim WS_Count As Integer
         Dim I As Integer

         ' Set WS_Count equal to the number of worksheets in the active
         ' workbook.
         WS_Count = ActiveWorkbook.Worksheets.Count

         ' Begin the loop.
         For I = 1 To WS_Count


           If ActiveWorkbook.Worksheets(I).Name = "Line Item Summary" Or ActiveWorkbook.Worksheets(I).Name = "Comparaison Job" then

          'Don't print

         Else 

           ActiveWorkbook.Worksheets(I).PrintOut

         Next I

         End If

      End Sub

按名称循环所有工作表,如果不是以您的2张工作表名称开头,则进行循环

Sub WorksheetLoop()

         Dim WS_Count As Integer
         Dim I As Integer

         ' Set WS_Count equal to the number of worksheets in the active
         ' workbook.
         WS_Count = ActiveWorkbook.Worksheets.Count

         ' Begin the loop.
         For I = 1 To WS_Count


           If ActiveWorkbook.Worksheets(I).Name = "Line Item Summary" Or ActiveWorkbook.Worksheets(I).Name = "Comparaison Job" then

          'Don't print

         Else 

           ActiveWorkbook.Worksheets(I).PrintOut

         Next I

         End If

      End Sub

下面是另一个使用LIKE和通配符*的版本。这将仅检查需要打印的纸张

Sub Sample()
    Dim ws As Worksheet

    For Each ws In ThisWorkbook.Worksheets
        If ws.Name = "Line Item Summary" Or ws.Name Like "Costing Sheet*" Then
            ws.PrintOut
        End If
    Next ws
End Sub

我会记住的!是否可以按照前面代码的建议,将此代码更改为执行相反的操作?用户可能会更改这些成本计算表的名称*,但仍处于行项目汇总和比较作业之间–iCalder 31分钟前

这就是你想要的吗?我处理了几张支票。您可能需要对其进行编辑以使其更加健壮

Option Explicit

Option Explicit

Sub Sample()
    Dim ws As Worksheet
    Dim wsStartIndex As Long, wsEndIndex As Long
    Dim i As Long
    Dim wsName As String

    '~~> Loop through the sheet and get the positions of the sheets
    For i = 1 To ThisWorkbook.Worksheets.Count
        wsName = ThisWorkbook.Sheets(i).Name
        If wsName = "Line Item Summary" Then wsStartIndex = ThisWorkbook.Sheets(i).Index
        If wsName = "Comparison Job" Then wsEndIndex = ThisWorkbook.Sheets(i).Index

        If wsStartIndex <> 0 And wsEndIndex <> 0 Then Exit For
    Next i

    '~~> Do necessary checks
    If wsStartIndex = 0 Then
        MsgBox "Line Item Summary Sheet not found"
    ElseIf wsEndIndex = 0 Then
        MsgBox "Comparison Job Sheet not found"
    ElseIf wsEndIndex < wsStartIndex Then
        MsgBox "Comparison Job is before Line Item Summary. Sheets cannot be printed"
    '~~> If everything is ok then print
    ElseIf wsStartIndex <> 0 And wsEndIndex <> 0 Then
        For i = wsStartIndex To (wsEndIndex - 1)
            If ThisWorkbook.Sheets(i).Name <> "Costing Sheet" Then
                ThisWorkbook.Sheets(i).pritnout
            End If
        Next i
    End If
End Sub

下面是另一个使用LIKE和通配符*的版本。这将仅检查需要打印的纸张

Sub Sample()
    Dim ws As Worksheet

    For Each ws In ThisWorkbook.Worksheets
        If ws.Name = "Line Item Summary" Or ws.Name Like "Costing Sheet*" Then
            ws.PrintOut
        End If
    Next ws
End Sub

我会记住的!是否可以按照前面代码的建议,将此代码更改为执行相反的操作?用户可能会更改这些成本计算表的名称*,但仍处于行项目汇总和比较作业之间–iCalder 31分钟前

这就是你想要的吗?我处理了几张支票。您可能需要对其进行编辑以使其更加健壮

Option Explicit

Option Explicit

Sub Sample()
    Dim ws As Worksheet
    Dim wsStartIndex As Long, wsEndIndex As Long
    Dim i As Long
    Dim wsName As String

    '~~> Loop through the sheet and get the positions of the sheets
    For i = 1 To ThisWorkbook.Worksheets.Count
        wsName = ThisWorkbook.Sheets(i).Name
        If wsName = "Line Item Summary" Then wsStartIndex = ThisWorkbook.Sheets(i).Index
        If wsName = "Comparison Job" Then wsEndIndex = ThisWorkbook.Sheets(i).Index

        If wsStartIndex <> 0 And wsEndIndex <> 0 Then Exit For
    Next i

    '~~> Do necessary checks
    If wsStartIndex = 0 Then
        MsgBox "Line Item Summary Sheet not found"
    ElseIf wsEndIndex = 0 Then
        MsgBox "Comparison Job Sheet not found"
    ElseIf wsEndIndex < wsStartIndex Then
        MsgBox "Comparison Job is before Line Item Summary. Sheets cannot be printed"
    '~~> If everything is ok then print
    ElseIf wsStartIndex <> 0 And wsEndIndex <> 0 Then
        For i = wsStartIndex To (wsEndIndex - 1)
            If ThisWorkbook.Sheets(i).Name <> "Costing Sheet" Then
                ThisWorkbook.Sheets(i).pritnout
            End If
        Next i
    End If
End Sub


我没有任何代码在此时打印工作表问题已编辑为包含代码只需按索引循环工作表即可。我没有任何代码在此时打印工作表问题已编辑为包含代码只需按索引循环工作表即可。当我尝试此代码时,会出现下一个无For错误。缺少结束If.行项目还需要打印摘要:我添加了End If,但仍然会出现相同的错误在下一个I之前添加End If,不是在它之后。当我尝试此代码时会出现下一个无For错误。它缺少结束If。行项目摘要也需要打印:我添加了结束If,但仍然会出现相同的错误在下一个I之前添加结束If,而不是在它之后。这很好!只是想知道是否有一种方法可以排除名为Costing sheet的原始表,而不改变名称。我正在吃晚饭。。。你也可以使用成本表*对不起,我正在吃晚餐。。。您也可以使用成本计算表*将记住这一点!是否可以按照前面代码的建议,将此代码更改为执行相反的操作?用户可能会更改这些成本计算表的名称*,但仍处于行项目摘要和比较作业之间。因此,如果表行项目摘要的位置为5,而比较作业的位置为8,则您希望打印表5、6和7?这很好!只是想知道是否有一种方法可以排除名为Costing sheet的原始表,而不改变名称。我正在吃晚饭。。。你也可以使用成本表*对不起,我正在吃晚餐。。。您也可以使用成本计算表*将记住这一点!是否可以按照前面代码的建议,将此代码更改为执行相反的操作?用户可能会更改这些成本计算表*的名称,但仍将处于行项目摘要和比较作业之间。因此,如果表行项目摘要的位置为5,而比较作业的位置为8,那么是否要打印表5、6和7?