VBA使用范围选择多个工作表

时间:2014-11-11 09:51:15

标签: excel vba excel-vba

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

但到目前为止,我找到的唯一方法是使用数组和“硬编码”工作表名称,并希望改为使用范围

这是我到目前为止尝试过的代码

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

我理想地喜欢使用Range("C2:C5")的东西,这样我就可以动态选择相关的工作表,而无需在VBA代码中输入“Sheet2”,“Sheet3”,“Sheet4”,“Sheet5”等< / p>

由于

3 个答案:

答案 0 :(得分:3)

工作表名称数组必须是包含一维数组的Variant类型。范围(&#34; C2:C5&#34;)返回二维数组。要将其用作工作表名称数组,您必须转置它。

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

答案 1 :(得分:0)

试试这个:

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

如果具有该名称的工作表在添加到阵列之前,您还可以考虑添加验证。

答案 2 :(得分:0)

需要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