【问题标题】:Selecting multiple sheets using a range使用范围选择多个工作表
【发布时间】:2014-11-11 09:51:14
【问题描述】:

我在单元格 C2 到 C5 中有工作表名称,它们是动态的。我想使用 VBA 同时选择它们。

我发现的唯一方法是使用数组和“硬编码”工作表名称。

Sub ssheets()
    Worksheets(Array("Sheet2", "Sheet3","Sheet4","Sheet5")).Select
End Sub

我想要一些使用 Range("C2:C5") 的东西,这样我就可以选择相关的工作表而无需输入“Sheet2”、“Sheet3”、“Sheet4”、“Sheet5”等。

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    工作表名称数组必须是包含一维数组的 Variant 类型。 Range("C2:C5") 返回一个二维数组。要将其用作工作表名称数组,您必须对其进行转置。

    Sub ssheets()
        Dim oWS As Worksheet
        Dim aSheetnames As Variant
        Set oWS = Worksheets(1)
        aSheetnames = oWS.Range("C2:C5")
        aSheetnames = Application.WorksheetFunction.Transpose(aSheetnames)
        Worksheets(aSheetnames).Select
    End Sub
    

    【讨论】:

      【解决方案2】:

      试试这个:

      Sub Macro1()
          Dim sheetArray() As String
          Dim i As Integer
          i = 0
          For Each c In Range("C2:C5").Cells
              ReDim Preserve sheetArray(0 To i)
              sheetArray(i) = c.Value
              i = i + 1
          Next
          Sheets(sheetArray).Select
      End Sub
      

      如果具有该名称的工作表存在,您也可以考虑在将其添加到数组之前添加验证。

      【讨论】:

        【解决方案3】:

        需要 3 行代码(如果您还想选择 ActiveSheet,则需要 2 行):

        Sub sSheets()
        
        Set xRange = Range("C2:C5") 'define ur range
          Sheets(xRange.Cells(1).Value).Select    'this is only needed to de-select the ActiveSheet
        For Each xCell In xRange: Sheets(xCell.Value).Select False: Next  '[False] is like holding Ctrl and clicking on different tabs
        
        End Sub
        

        【讨论】:

          猜你喜欢
          • 2021-08-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-02-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多