Попытка использовать VBA-excel для фильтрации одного рабочего листа на основе значения, которое щелкнуло в другом рабочем листе. - PullRequest
0 голосов
/ 05 мая 2011

ОК, я полный нуб VBA, так что извините за мой ужасный код.

У меня есть две таблицы Excel, одна из которых называется «Подрядчики», а другая - «Referring_to_Contractors».

Лист подрядчиков выложен вот так.

Terr ContractorID Первый Последний
1 7 Боб Смит
2 5 Джефф Браун
3 8 Стэн Ли

Лист Referring_to_Contractors имеет те же поля и макет, что и лист «Подрядчики» выше, но также имеет дополнительные столбцы для «Направляющих подрядчиков», поэтому он имеет столбцы «Ref_Contractor_Id», «Ref_First», «Ref_Last» и т. Д.

То, что я пытаюсь сделать, это использовать VBA, чтобы, когда кто-то дважды щелкнул строку на листе «Подрядчики», он принял значение в столбце Contractor_ID, затем посмотрел на листе «Referring_to_Contractors» и отфильтровал все записи в этом листе, которые имеют это значение как Contractor_ID. По сути, это будет отображать реферальную информацию для Contractor_ID, щелкнувшего на первом листе. Я создал именованный диапазон для поля Contractor_ID под названием «PrimaryContractor»

Итак, на первом листе «Подрядчики» у меня есть:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

End Sub

и ..

Sub Select_Ref_Contractors()

    ContractorId = Range("PrimaryContractor").Value

    With Sheets("Referring_to_Contractors")
        .Visible = True
        .Select
   End With

    ActiveSheet.Range("$B$10:$N$44163).AutoFilter Field: =1, Criteria1:= ContractorID

    Application.Goto Range("A1"), True

End Sub

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

Будем весьма благодарны за любые полезные или даже полезные ссылки.

1 Ответ

1 голос
/ 05 мая 2011

Я только что выбил это в Excel 2007, и, кажется, работает

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim id As String

If Not Target.Cells.Count > 1 Then
    id = CStr(Selection)

    Sheet2.Activate
    Sheet2.Range("A1", "c4").AutoFilter 1, id
End If
End Sub

Он использует одну и ту же таблицу на обоих листах, как показано ниже, и когда вы дважды щелкаете ячейку на Листе1, происходит событие BeforeDoubleClick, и вы попадаете на Лист2 с примененным фильтром.

ID  ID2 Text
1   2   a
2   2   b
3   3   c
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...