#excel #vba
Вопрос:
Когда я задаю следующий код, я хотел бы отфильтровать содержимое массива.
Поэтому я хотел бы отфильтровать имя test1
и sheet1
лист
Я разработал пример сценария следующим образом
Но он вернул неправильный тип, который не совпадает в If ws.Name Like list Then
Dim list as variant
list = Array("test1", "sheet1")
For Each ws In wb.Worksheets
If ws.Name Like list Then
End If
next
Как избежать этой ошибки ?
И как я могу фильтровать листы ?
Если у кого-то есть мнение, пожалуйста, дайте мне знать
Спасибо
Комментарии:
1. Привет, я бы просто добавил или заявление внутри и не пошел со списком. Или попробуйте воспользоваться приложением. Матч
Application.Match(Sheets(i).Name, list, 0)
Ответ №1:
Sub a()
List = Array("test1", "sheet1")
x = Application.Match("test1", List, 0)
If IsError(x) Then
Debug.Print "Not Found"
Else
Debug.Print "Found at position " amp; x
End If
End Sub
Ответ №2:
Фильтрация путем отображения только перечисленных листов
Как я могу фильтровать листы?
а) Чтобы найти эквивалентные имена, вы можете проверить, Application.Match()
возвращает ли ошибка для не найденных через IsError
(или, альтернативно, если есть результаты через IsNumeric
). Обратите внимание, что сопоставление не зависит от регистра.
б) В конечном итоге вы можете установить .Visible
свойство рабочего листа на
True
(т. е.xlSheetVisible
) илиFalse
(т. е.xlSheetHidden
).
Sub ShowOnlyListedSheets()
Dim list As Variant
list = Array("test1", "sheet1")
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
If IsError(Application.Match(ws.Name, list, 0)) Then
ws.Visible = xlSheetHidden ' or: False
Else
ws.Visible = xlSheetVisible ' or: True
End If
Next
End Sub