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