如何在工作簿的每个工作表中一起运行这些宏?

时间:2019-05-30 11:13:32

标签: excel vba

我写了一本excel书,其中将数据集粘贴到一个选项卡中,并运行宏以将信息过滤到单独的工作表中,以准备批处理PDF。目前,我在每个工作表上都有一个“更新表”按钮,必须浏览每个工作表才能单击此按钮。我希望这是第一张纸上的一个按钮。我也有一个按钮来设置所有纸张上的打印区域-这个循环并可以正常工作。我想合并代码,因此在每个工作表上都将使用一个按钮来更新表格,然后设置打印区域。

到目前为止,尽管经过数小时的谷歌搜索,我还是没有运气将这些代码合并在一起,所以以为我会在这里尝试。我是VBA的新手(刚教了我几个星期)。

    Sub Auto_Table_Update()

        Sheets("All Data").Range("A50:K9999").AdvancedFilter Action:=xlFilterCopy, _
            CriteriaRange:=Range("C2:C3"), CopyToRange:=Range("A5:K9999"), Unique:= _
            False
    '*Advance Filter Macro to update the table in the worksheet*


        Range("C4").Select
        ActiveCell.FormulaR1C1 = "=LEFT(R[-1]C,3)"
        Range("C5").Select
    '*Sets the worksheet name as the first 3 letters in cell C4*

    End Sub


    Sub Workbook_Print_Area()
    Dim ws      As Worksheet

    Dim LR      As Long, _
        LC      As Long

    For Each ws In ActiveWorkbook.Worksheets
        With ws
            LR = .Range("A" & Rows.Count).End(xlUp).Row
            LC = .Cells(1, Columns.Count).End(xlToLeft).Column
            .PageSetup.PrintArea = .Range(.Cells(1, 1), .Cells(LR, LC)).Address
            End With
    ' *sets the print area on every sheet*
    Next ws
    End Sub

就像我说的那样,我只希望一个按钮在每张纸上运行以上代码。或至少要在每个工作表上运行“ Auto_Update_Table”,而不是像我目前那样在每个工作表上都有一个按钮来运行它。

我很欣赏其中的一些编码错误。对更改的任何解释也将不胜感激。感谢您的耐心等待。.我正在努力解决所有问题:)

更新

我尝试这样做:

    Sub One_Button()
    Dim ws      As Worksheet

    Dim LR      As Long, _
        LC      As Long

    For Each ws In ActiveWorkbook.Worksheets

        With ws
            Sheets("All Data").Range("A50:K9999").AdvancedFilter Action:=xlFilterCopy, _
                CriteriaRange:=Range("C2:C3"), CopyToRange:=Range("A5:K9999"), Unique:= _
                False

            Range("C4").Select
            ActiveCell.FormulaR1C1 = "=LEFT(R[-1]C,3)"
            Range("C5").Select
            LR = .Range("A" & Rows.Count).End(xlUp).Row
            LC = .Cells(1, Columns.Count).End(xlToLeft).Column
            .PageSetup.PrintArea = .Range(.Cells(1, 1), .Cells(LR, LC)).Address
            End With
    Next ws
    End Sub

这给了我错误信息“提取范围的字段名称缺失或无效。”这是因为它试图在第一个工作表(带有主数据集)上运行吗?如果是这样,我如何告诉它忽略主数据集表? 在此先感谢:)

1 个答案:

答案 0 :(得分:0)

您可以试试吗?您需要确保您的条件范围包括正确的标题,并且没有任何空格。

Sub One_Button()

Dim ws      As Worksheet
Dim LR      As Long, _
    LC      As Long

For Each ws In ActiveWorkbook.Worksheets
    If ws.Name <> "All Data" Then
        With ws
            Sheets("All Data").Range("A50:K9999").AdvancedFilter Action:=xlFilterCopy, _
                     CriteriaRange:=ws.Range("C2:C3"), CopyToRange:=ws.Range("A5"), Unique:=False
            ws.Range("C4").FormulaR1C1 = "=LEFT(R[-1]C,3)"
            LR = .Range("A" & Rows.Count).End(xlUp).Row
            LC = .Cells(1, Columns.Count).End(xlToLeft).Column
            .PageSetup.PrintArea = .Range(.Cells(1, 1), .Cells(LR, LC)).Address
        End With
    End If
Next ws

End Sub