Как проверить, есть ли на каждом листе указанное имя

#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