VBA: Как фильтровать, используя заголовки таблиц - PullRequest
0 голосов
/ 09 января 2019

Я создал кнопку макроса с именем «Проекты MCO», которая при нажатии будет фильтровать мою электронную таблицу, чтобы отфильтровывать только активные проекты MCO (ищет «MCO» в столбце «Продукт» H и Фаза 2b и Фаза 3 в Фазе Gate-Gate Phase колонка R). Теперь работает нормально. Однако у меня возникает проблема, если добавить столбец в электронную таблицу перед столбцом H «Поле 8» или между столбцом H «Поле 8» и столбцом R «Поле 18» (все, что находится перед столбцом продукта и этапом. Фаза ворот) это скинет макрос вычисления. Например, если бы я добавлял новый столбец после столбца «G», это могло бы испортить макрос, и проекты не будут корректно фильтроваться.

Цель состоит в том, чтобы нажать кнопку макроса «Проекты MCO», чтобы отфильтровать таблицу по продукту (заголовок) и найти «MCO» (в настоящее время поле «8»). И отфильтровать фазу затвора фазы (заголовок) (в настоящее время поле «18») для включения как «фазы 3», так и «фазы 2b». Так кто-нибудь знает, как макрос может посмотреть конкретно на столбец Product? Независимо от того, должен ли столбец быть добавлен или удален? Будем весьма благодарны за любую помощь / руководство, которое вы можете предоставить.

Код VBA

Снимок экрана таблицы

1 Ответ

0 голосов
/ 09 января 2019

Поскольку ваша таблица начинается в столбце А, у вас есть несколько вариантов. Например, вы можете использовать ListColumns с индексом, чтобы вернуть номер столбца для поля Product в таблице. Повторите эту логику для других полей. Если он не начинался с А, вы можете использовать тот же принцип с вычитанием для начального столбца в качестве корректировки.

table.ListColumns("Product").Index  '<== Gives your 8 for Field:=

Вы также можете использовать Find на HeaderRowRange

Option Explicit
Public Sub Test()
    Dim table As ListObject, field1 As Range, fieldFilter1 As Long
    Set table = ActiveSheet.ListObjects("Capacity_Model")

    Set field1 = table.HeaderRowRange.Find("Product")
    If Not field1 Is Nothing Then
        fieldFilter1 = field1.Column
    End If
    Debug.Print table.ListColumns("Product").Index
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...