我会在单元格C2到C5中有一些工作表名称,这些工作表是动态的,我想使用VBA同时选择它们
但到目前为止,我找到的唯一方法是使用数组和“硬编码”工作表名称,并希望改为使用范围
这是我到目前为止尝试过的代码
Sub ssheets()
Worksheets(Array("Sheet2", "Sheet3","Sheet4","Sheet5")).Select
End Sub
我理想地喜欢使用Range("C2:C5")
的东西,这样我就可以动态选择相关的工作表,而无需在VBA代码中输入“Sheet2”,“Sheet3”,“Sheet4”,“Sheet5”等< / p>
由于
答案 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