在Excel VBA中将工作表名称添加到数组

时间:2015-05-06 21:25:40

标签: arrays excel vba worksheet

我正在尝试使用下面的代码将表单名称添加到Excel VBA中的数组中。它只获取一个值(始终是最后一个工作表名称)。例如,如果我有2张:List1和List2,它只会拾取List2并显示第一张纸的空白值。如果我添加4,它只显示第4个,依此类推。我不确定为什么我会得到空白值。

Dim curSheet As Worksheet
Dim ArraySheets() As String
Dim x As Variant

For Each curSheet In ActiveWorkbook.Worksheets

    If curSheet.Name Like "*List*" Then

        ReDim ArraySheets(x)

        ArraySheets(x) = curSheet.Name

        x = x + 1

    End If

Next curSheet

2 个答案:

答案 0 :(得分:6)

您应该将ReDim ArraySheets(x)更改为ReDim Preserve ArraySheets(x)

当您仅使用ReDim时,不保留数组的内容,这就是您只获得最终工作表名称的原因。使用ReDim Preserve重新调整数组的大小,同时保留内容。

答案 1 :(得分:2)

没有循环

Sub GetNAmes()
Dim strIn As String
Dim X

strIn = Application.InputBox("Search string", "Enter string to find", "*List*", , , , , 2)
If strIn = "False" Then Exit Sub

ActiveWorkbook.Names.Add "shtNames", "=RIGHT(GET.WORKBOOK(1),LEN(GET.WORKBOOK(1))-FIND(""]"",GET.WORKBOOK(1)))"
X = Filter([index(shtNames,)], strIn, True, 1)

Select Case UBound(X)
    Case Is > 0
        strIn = Application.InputBox(Join(X, Chr(10)), "Multiple matches found - type position to select", , , , , 1)
        If strIn = "False" Then Exit Sub
        On Error Resume Next
        Sheets(CStr(X(strIn))).Activate
        On Error GoTo 0
    Case 0
        Sheets(X(0)).Activate
    Case Else
        MsgBox "No match"
End Select

End Sub