【问题标题】:Excel VBA 2007: Select all sheets except for specified ones (to perform actions onto)Excel VBA 2007:选择除指定工作表之外的所有工作表(以执行操作)
【发布时间】:2010-07-14 07:31:22
【问题描述】:

我正在尝试创建一个宏来选择工作簿中的大部分工作表,然后使用 ExportAsFixedFormat 将它们打印为 PDF。

问题是,虽然我知道我不想想要包含的工作表,但我不知道在给定时间哪些工作表将到位,所以我无法制作“选择这些工作表”的静态列表(无论如何维护可能会很痛苦)。

有没有办法,比如“全选然后取消选择这些特定的工作表”或类似的东西?

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    怎么样:

    Dim s As Worksheet
    DoNotInclude = "Sheet2"
    For Each s In ActiveWorkbook.Worksheets
        If InStr(DoNotInclude, s.Name) = 0 Then
            ''Do something
        End If
    Next
    

    【讨论】:

    • 这里的问题出在''Do something 部分。是的,您可以转到.Select False 将当前工作表添加到当前选定的工作表中,但请尝试适应不需要的工作表已经是活动工作表的情况。然后,此代码会将其包含在选择中。
    【解决方案2】:

    没有。这并不妨碍您自己动手:

    Public Sub SelectExceptThese(ByVal wb As Workbook, ExceptThese() As String)
    
      Dim ws() As String
      ReDim ws(1 To wb.Worksheets.Count)
    
      Dim wt As Worksheet
      Dim i As Long
      For Each wt In wb.Worksheets
        If Not IsInArray(ExceptThese, wt.Name) Then
          i = i + 1
          ws(i) = wt.Name
        End If
      Next
    
      If i > 0 Then
        ReDim Preserve ws(LBound(ws) To LBound(ws) + i - 1)
        wb.Worksheets(ws).Select
      End If
    
    End Sub
    
    Private Function IsInArray(arr() As String, val As String) As Boolean
      Dim i As Long
    
      For i = LBound(arr) To UBound(arr)
        If arr(i) = val Then
          IsInArray = True
          Exit Function
        End If
      Next
    End Function
    

    【讨论】:

      【解决方案3】:

      这可能有点太晚了,但可能对其他人有帮助。

      如果您知道不想导出哪些工作表并且如果这些工作表始终相同,则可以执行以下操作..

      Sheets("sheetnotincluded1").Visible = False
      Sheets("sheetnotincluded2").Visible = False
      
      ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
      "FilePath.pdf", Quality:=xlQualityStandard, _
      IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
      True
      
       Sheets("sheetnotincluded1").Visible = True
       Sheets("sheetnotincluded2").Visible = True
      

      您只是隐藏不需要的工作表、导出活动工作簿并取消隐藏不需要的工作表。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-28
        • 2018-11-07
        相关资源
        最近更新 更多