将 Sheet 个名称添加到 Excel VBA 中的数组
Adding Sheet Names to Array in Excel VBA
我正在尝试使用以下代码将 sheet 名称添加到 Excel VBA 中的数组中。它只获取一个值(总是最后一个工作 sheet 名称)。例如,如果我有 2 个 sheet:List1 和 List2,它只会选择 List2 并为第一个 sheet 显示空白值。如果我加 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
您应该将 ReDim ArraySheets(x)
更改为 ReDim Preserve ArraySheets(x)
当你只使用 ReDim
时,数组的内容不会被保留,这就是为什么你只得到最终的 sheet 名称。使用 ReDim Preserve
重新调整数组大小,同时保留内容。
没有循环
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
我正在尝试使用以下代码将 sheet 名称添加到 Excel VBA 中的数组中。它只获取一个值(总是最后一个工作 sheet 名称)。例如,如果我有 2 个 sheet:List1 和 List2,它只会选择 List2 并为第一个 sheet 显示空白值。如果我加 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
您应该将 ReDim ArraySheets(x)
更改为 ReDim Preserve ArraySheets(x)
当你只使用 ReDim
时,数组的内容不会被保留,这就是为什么你只得到最终的 sheet 名称。使用 ReDim Preserve
重新调整数组大小,同时保留内容。
没有循环
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