Использование флажков для фильтрации списка листов

#excel #vba

#excel #vba

Вопрос:

У меня есть рабочая книга с несколькими листами. Я создаю список в пользовательской форме с этими листами в алфавитном порядке, нажимаю на строку и нажимаю печать.

Я хотел бы установить флажок и нажать поиск, и появятся только отфильтрованные листы.

Форма пользователя
введите описание изображения здесь

Вкладки рабочего листа
введите описание изображения здесь

 Dim i As Long

Private Sub CommandButton1_Click()
    ListBox1.Clear
    SE = False
    TE = False
    SS = False
    TS = False
    AK = False
    EK = False
    
    End Sub
    
    Private Sub FilterButton1_Click()
    
    If SE = True Then
    For i = 1 To ActiveWorkbook.Sheets.Count
        ListBox1.AddItem ActiveWorkbook.Sheets(i).Name
        Next i
    End If
    If TE = True Then
    For i = 1 To ActiveWorkbook.Sheets.Count
        ListBox1.AddItem ActiveWorkbook.Sheets(i).Name = "*TE*"
    Next i
    End If
    If SS = True Then
    For i = 1 To ActiveWorkbook.Sheets.Count
        ListBox1.AddItem ActiveWorkbook.Sheets(i).Name = "*SS*"
    Next i
    End If
    If TS = True Then
    For i = 1 To ActiveWorkbook.Sheets.Count
        ListBox1.AddItem ActiveWorkbook.Sheets(i).Name = "*TS*"
    Next i
    End If
    If AK = True Then
    For i = 1 To ActiveWorkbook.Sheets.Count
        ListBox1.AddItem ActiveWorkbook.Sheets(i).Name = "*AK*"
    Next i
    End If
    If EK = True Then
    For i = 1 To ActiveWorkbook.Sheets.Count
        ListBox1.AddItem ActiveWorkbook.Sheets(i).Name = "*EK*"
    Next i
    End If
    
End Sub
  

Комментарии:

1. Являются ли эти флажки также именами ваших листов?

2. Было бы проще изменить существующий код, но вы его не включили… По крайней мере, опубликуйте код, который вы используете для заполнения списка.

3. Вкладки рабочего листа содержат «SE» или «TE» и т. Д. Я надеялся использовать подстановочные знаки в фильтре.

4. Строка флажка «SE» — это та, которая работает, но показывает все вкладки листа.

5. Я думаю, вам нужно будет добавить еще несколько деталей к этому вопросу (особенно в отношении того, что вы ожидаете от своих строк кода и что вы на самом деле видите, что он делает). Я не понимаю, что пытаются сделать строки, которые вы опубликовали, поэтому есть вероятность, что другие участники будут в равной степени сбиты с толку. Не могли бы вы также сообщить нам, компилируется ли этот код.

Ответ №1:

Ваша начальная загрузка формы вызывается LoadSheetList без аргумента, поэтому будут загружены все листы.

Ваша кнопка «Фильтр» вызывает вызовы LoadSheetList True , которые будут добавлять листы только на основе статусов флажков.

 Sub LoadSheetList(Optional filtered As Boolean = False)
    Dim ws As Worksheet, nm
    
    ListBox1.Clear 'first remove all items
    'loop all sheets
    For Each ws In ActiveWorkbook.Worksheets
        nm = ws.Name
        If Not filtered Or (filtered And SheetOK(nm)) Then
            ListBox1.AddItem nm 'add if included or not filtering
        End If
    Next ws
End Sub

'review checkbox status to see is a sheet with the provided name should be added
'EDIT: updated to "and" checkboxes, not "or"
Function SheetOK(sheetName) As Boolean
    Dim cb, rv as Boolean

    rv = False 'default result
    For Each cb In Array(SE, TE, SS, TS, AK, EK)
        If cb.Value = True then
            if not sheetName Like "* " amp; cb.Name amp; "*" then
                rv = False
                Exit For
            Else
                rv = True
            End If
        End If
        SheetOK = rv
    Next cb
    
End Function
  

Комментарии:

1. Я не могу дождаться, чтобы попробовать это. Похоже, это именно то, что мне было нужно. Я буду держать вас в курсе. Спасибо!

2. ЭТО РАБОТАЕТ ОТЛИЧНО, еще раз спасибо за вашу помощь, Тим

3. Извините за беспокойство. После использования формы и ее полностью можно использовать так, как она есть, но вот часть, за которую я прошу прощения. Когда я фильтрую с помощью более чем одного флажка, он фильтрует все листы с нужной информацией, но было бы лучше, если бы он фильтровался по (выбор 1 «amp;» выбор 2 …..). Я попытаюсь разобраться в этом, но приму любую помощь.

4. Смотрите Мое редактирование — непроверено, но я думаю, что это должно сработать