在多个工作表的几个表上使用单个宏

时间:2013-03-15 14:48:56

标签: excel excel-vba vba

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

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

我的问题是,宏只适用于我在其上创建的工作表/表格,是否可以重新编写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

2 个答案:

答案 0 :(得分:0)

您正在寻找的密钥是ActiveSheet,现在只将Autofilter应用于您在您面前看到的工作表。如果您要更改可以链接到每个工作表的对象,则可以按顺序将其应用于每个工作表。

现在当你的工作表都只有一个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

答案 1 :(得分:0)

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

如果它不是因为ListObjects("Table25").Range引用 - 您可能希望将其更改为UsedRange

您的代码看起来像是:

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

如果没有看到您的工作表/布局,那就是我能为解决方案提供的最接近的工作。

希望这有帮助。