Макрос для фильтрации активной ячейки с другого листа

Я пытаюсь отфильтровать столбец, используя значение из другого листа. Я хочу иметь возможность щелкнуть в любом месте столбца B из электронной таблицы S1 и иметь возможность фильтровать столбец A в электронной таблице S2, используя значение столбца A в той же строке в S1. Используя приведенный ниже код, я могу фильтровать столбец A в S2, используя значение в ячейке A3.

Sheets("S2").Select
    ActiveCell.Select
    Selection.AutoFilter
ActiveSheet.Range("$A$1:$N$100").AutoFilter Field:=1, Criteria1:= _
    "=" & Sheets("S1").Range("A3"), Operator:=xlAnd

Конец сабвуфера

Я хочу иметь возможность использовать приведенный ниже код, чтобы иметь возможность выбирать значение из столбца A, которое находится слева от ActiveCell, вместо того, чтобы говорить A3 (как в приведенном выше коде).

ActiveCell.Offset(0, -1).Select
        ActiveCell. Select
        Selection.Copy

Что я должен использовать как Criteria1:=, чтобы добиться этого. Использование "=" & ActiveCell .Value, Operator:=x1And позволяет мне использовать значение в S2, но "=" & Sheets("S1").Range(ActiveCell. Value), Operator:=x1And выдает ошибку.


person Chicago_User    schedule 13.05.2016    source источник


Ответы (1)


ActiveCell уникален во всем Application (Excel)

поэтому, если вы хотите переходить между листами и по-прежнему ссылаться на конкретный Worksheet "ActiveCell" (т. е. ячейку, которая была бы фактическим Application.ActiveCell, если бы этот конкретный Worksheet был активным), тогда вы должен сначала сохранить его в переменной типа Range, прежде чем покинуть этот конкретный Worksheet:

Dim MyActiveCell As Range

Set MyActiveCell = ActiveCell ' store the reference to currently active cell of active sheet 

Sheets("S2").Activate ' "jump" to another Worksheet

Sheets("S2").Range("$A$1:$N$100").AutoFilter Field:=1, Criteria1:=MyActiveCell.Offset(0, -1).Value ' use MyActiveCell to reference the "active" cell previously stored

но вы также можете избежать «перепрыгивания листов»: если ваш текущий активный Worksheet — это тот, на который вы хотите сослаться на его ActiveCell и использовать его для фильтрации «S2» Worksheet, вы можете пойти:

Sheets("S2").Range("$A$1:$N$100").AutoFilter Field:=1, Criteria1:=ActiveCell.Offset(0, -1).Value ', Operator:=xlAnd 

и продолжайте «оставаться» на активном листе, «действуя» на других листах, просто полностью определяя диапазоны и вызывая на них методы.

Sheets("MyOtherSheet").Range("MyOtherSheetRangeAddress").ProperRangeMethod
person user3598756    schedule 15.05.2016
comment
Пожалуйста. Если мой ответ ответил на ваш вопрос, отметьте его как принятый. Спасибо - person user3598756; 16.05.2016