繁体   English   中英

VBA代码可使用VBA工作表名称和可见来打印多张工作表

[英]VBA Code to Print Multiple Sheet using the VBA Worksheet name and Visible

我一直在使用代码在Visible = True的条件下使用VBA工作表来打印多个工作表,并且不包括特定工作表。 我什么都没有。

Sub Printetail()
'
' PrintDetail Macro
'
    Dim wsSheet As Worksheet
    If Not wsSheet Is Nothing Then

      If wsSheet.Visible = True 
         And wsSheet.CodeName <> "EstimateBasis" 
         And wsSheet.CodeName <> "CashFlow" 
         And wsSheet.CodeName <> "MaterialPVTable" 
         And wsSheet.CodeName <> "Material" 
         And wsSheet.CodeName <> "Instruction"
         And wsSheet.CodeName <> "DebugSheet"
         And wsSheet.CodeName <> "StateLocalTax" 
         And wsSheet.CodeName <> "Referene" 
      Then
          '???
      End If

      If wsSheet.CodeName = "ProjectInput" Then

          wsSheet.PageSetup.CenterFooter = ActiveSheet.Range("C6").Text & _
                                           "    -Estimate Date:" & _
                                           ActiveSheet.Range("F2").Text & _
                                           "    -Gate:" & _
                                           ActiveSheet.Range("F4").Text & _
                                           "    -Rev No." & _
                                           ActiveSheet.Range("F5").Text

          wsSheet.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False

      Else

          wsSheet.Visible = True
          wsSheet.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False

      End If

End If

End Sub

wsSheet Nothing因为您还没有分配它。 您将需要迭代ThisWorkbook工作表; 这样的事情应该会带你到某个地方:

Dim wsSheet As Worksheet
For Each wsSheet In ThisWorkbook.Worksheets

    If CanPrintThisSheet(wsSheet) Then PrintWorksheet wsSheet

Next

然后CanPrintThisSheet将是一个Boolean -returning功能,你就会把对“可打印的纸张”所有的条件和PrintWorksheet将是一个子/过程,你就会把页面设置和打印逻辑( 仅此而已比调用ws.PrintOut ):

Function CanPrintThisSheet(sheet As Worksheet) As Boolean
    CanPrintThisSheet = sheet.Visible And Not StringMatchesAny(sheet.CodeName, _
             "EstimateBasis", _
             "CashFlow", _
             "MaterialPVTable", _
             "Material", _
             "Instruction", _
             "DebugSheet", _
             "StateLocalTax", _
             "Referene")
End Function

使用下面的“ StringMatchesAny”之类的函数可以避免执行所有检查,因为一旦找到匹配项,该函数就会返回:

Function StringMatchesAny(string_source, ParamArray find_strings()) As Boolean

    'String-typed local copies of passed parameter values:
    Dim find As String, src As String, i As Integer, found As Boolean
    src = CStr(string_source)

    For i = LBound(find_strings) To UBound(find_strings)
        find = CStr(find_strings(i))
        found = (src = find)
        If found Then Exit For
    Next

    StringMatchesAny = found

End Function

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM