用于筛选另一个工作表中的活动单元格的宏

Macro to filter on an active cell from another worksheet

我正在尝试使用另一个工作表中的值对列进行筛选。我希望能够单击电子表格 S1 中 B 列中的任意位置,并能够使用 S1 中同一行中 A 列的值对电子表格 S2 中的 A 列进行过滤。使用下面的代码,我可以使用单元格 A3 中的值过滤 S2 中的 A 列。

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

结束子

我希望能够使用下面的代码从 ActiveCell 左侧的 A 列中选取值,而不是说 A3(如上面的代码所示)。

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

我应该使用什么 Criteria1:= 才能实现这一目标。使用 "=" & ActiveCell .Value, Operator:=x1And 可以让我使用 S2 中的值,但是 "=" & Sheets("S1").Range(ActiveCell. Value), Operator:=x1And 会出错。

ActiveCell 在整个 Application (Excel)

中是唯一的

所以如果你想在 sheets 之间跳转并且仍然引用 specific Worksheet "ActiveCell" (即单元格将是实际的 Application.ActiveCell 如果 specific 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:$N0").AutoFilter Field:=1, Criteria1:=MyActiveCell.Offset(0, -1).Value ' use MyActiveCell to reference the "active" cell previously stored

但您也可以避免 "sheet-jumping":如果您当前的活动 Worksheet 是您想要引用其 ActiveCell 并将其用于 "S2" Worksheet过滤,可以去:

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

并在活动 sheet 中继续 "staying",而在其他 sheet 中继续 "acting",只需完全限定范围并在其上调用方法

Sheets("MyOtherSheet").Range("MyOtherSheetRangeAddress").ProperRangeMethod