1

我有一本分成一页=一年中的一个月的工作簿。在每张纸上都有一个表格,上面有各种条件格式。从那里我过滤信息的几种方式来获取某些信息,(未结余额,等待调度的项目等)

我正在尝试设置一些简单的宏来加快过滤速度,例如仅显示来自特定公司的已发送但未付款的订单。

我的问题是,宏只适用于我创建它的工作表/表格,是否可以改写 vb 代码以使宏在我的工作簿的所有工作表/表格中工作?

这是其中一个宏的示例,抱歉,如果此论坛上有插入代码的协议,请恕我无知。

Sub HSWC_only()
'
' HSWC_only Macro
' leaves only hi-spec jobs
'
' Keyboard Shortcut: Ctrl+m
'
    ActiveSheet.ListObjects("Table25").Range.AutoFilter Field:=3, Criteria1:= _
        "=HSWC*", Operator:=xlAnd
End Sub
4

2 回答 2

0

看起来您的宏应该这样做,因为它引用了ActiveSheet,因此它应该适用于您当前所在的任何工作表。

如果不是,那是因为ListObjects("Table25").Range参考 - 您可能希望将其更改为类似于以下内容的内容UsedRange

您的代码看起来类似于:

ActiveSheet.UsedRange.AutoFilter Field:=3, Criteria1:= _
    "=HSWC*", Operator:=xlAnd

在没有看到您的工作表/布局的情况下,这是我能提供的最接近解决方案的方法。

希望这可以帮助。

于 2013-03-15T14:57:53.610 回答
0

您正在寻找的关键是ActiveSheet,这现在仅将自动过滤器应用于您在您面前看到的工作表。如果您将其更改为可以链接到每个工作表的对象,则可以按顺序将其应用于每个工作表。

现在,当您的工作表都只有一个 List 时,您可以引用第一个 ListObject 而不是其名称。

如果你把这条线放在Loop这样的地方:

Sub HSWC_only() 
'
'HSWC_only Macro 
' leaves only hi-spec jobs 
'
' Keyboard Shortcut: Ctrl+m
'
    Dim ws as Worksheet

    For each ws in ThisWorkbook.Worksheets
        ws.ListObjects(1).Range.AutoFilter Field:=3, Criteria1:= _ 
            "=HSWC*", Operator:=xlAnd 
    Next ws
End Sub
于 2013-03-15T14:56:00.520 回答