如何在 MS EXCEL VBA 中引用非活动 sheet 中的 UsedRange

How to reference UsedRange in non active sheet in MS EXCEL VBA

当包含要排序的数据的 sheet 处于活动状态 (sheet2) 时,代码工作正常。但我实际上在另一个 sheet (sheet1) 上设置了宏按钮。这是模块中的代码:

    Sheet2.UsedRange.Sort Key1:=Range("O1"), Key2:=Range("L1"), Key3:=Range("I1"), Header:=xlYes, _
    Order1:=xlAscending, Order2:=xlAscending, Order3:=xlDescending

当我 运行 来自 sheet1 中按钮的宏时(即 sheet 1 现在处于活动状态 sheet,但不包含需要排序的数据) 我收到 运行-时间错误 1004,排序参考无效。这是因为现在活动的 sheet (sheet1).

上没有数据

如何正确引用 sheet 2 中的使用范围,以便在 sheet 处于非活动状态时对数据进行排序?

您的问题不是 Sheet2.UsedRange,而是不合格的 Range 调用关键参数,这意味着隐含这些是 ActiveSheet.Range("O1")ActiveSheet.Range("L1") 等等.

在每个 Range 调用之前添加 Sheet2,或者使用 With 块并确保在每个 Range 之前添加句点 .调用,以及之前 UsedRange.

With Sheet2
    .UsedRange.Sort Key1:=.Range("O1"), Key2:=.Range("L1"), Key3:=.Range("I1"), Header:=xlYes, _
    Order1:=xlAscending, Order2:=xlAscending, Order3:=xlDescending
End With