2015-09-03 2 views
0

У меня есть таблица данных с автоматическим фильтром (см. Ниже).Проверка данных таблицы с фильтром

Sub Tariff_Filter() 

    Dim columnNumber, tableRow, tableColumn, tableWidth As Integer 
    Dim tableName, columnName As String 

    tableName = "Tariff_Table" 
    columnName = ActiveSheet.Range("A1").Value 

    'This clears the existing filter 

    ActiveSheet.ListObjects(tableName).Range.AutoFilter 

    'Assign some numbers we need to know about the table to check the headers 
    tableRow = ActiveSheet.ListObjects(tableName).Range.Row 
    tableColumn = ActiveSheet.ListObjects(tableName).Range.Column 
    tableWidth = ActiveSheet.ListObjects(tableName).Range.Columns.Count 

    'If a column title with the specified value does not exist VBA throws an error which we need to catch 
    On Error GoTo ErrorHandler 

    'Search through the table column header row to find the specified column and assign the number to columnNumber 
    columnNumber = Application.WorksheetFunction.Match(columnName, Range(Cells(tableRow, tableColumn), Cells(tableRow, tableColumn + tableWidth)), 0) 

    'Apply the filter "1" to the found columnNumber 
    ActiveSheet.ListObjects(tableName).Range.AutoFilter field:=columnNumber, Criteria1:="1" 

    'Exit the sub otherwise the "error handling" will be provoked 
    Exit Sub 

ErrorHandler: 

    MsgBox columnName & "Please Specify Required Channel" 

End Sub 

Как я не могу показаться, чтобы выяснить, как получить мой комбо-бокс, чтобы показать только видимые ячейки после фильтрации таблицы я был интересно, если есть способ я могу создать аа окна проверки, чтобы показать видимые ячейки или копировать видимые данные в отдельный стол внизу. Затем я могу использовать поле проверки/вторичную таблицу в качестве точки фокусировки для поля со списком в пользовательской форме.

Заранее спасибо

ответ

0

Если я понять ваш вопрос правильно, вы хотели бы иметь раскрывающийся список данных проверки, что обновления как таблица фильтруются и отображают только видимые элементы для данного столбца.

Вы можете сделать это, используя следующую формулу в Валидация данных (я предполагаю, что ваша строка заголовка таблицы начинается в A1 и это цв вам нужно отобразить):

= OFFSET ($ A $ 2 ,, , SUBTOTAL (103, TableName [название столбца]))

Эта формула расширяется из начальной ячейки (A2) на заданную высоту в количестве строк. Мы определяем высоту с помощью SUBTOTAL с номером функции 103 - это означает, что высота определяется с помощью COUNTA, но только для видимых ячеек, поэтому она будет расширяться и сворачиваться при фильтрации.

Знайте: поскольку высота определяется с помощью функции counta, она будет считать только ячейки, содержащие данные, поэтому, если у вас есть пробелы в таблице, диапазон не будет определен правильно. Также, если у вас есть повторяющиеся данные, они будут повторяться в раскрывающемся списке, этот метод не будет конденсировать их в аккуратный уникальный список.

Надеюсь, это полезно. D

Смежные вопросы