【发布时间】:2016-11-03 12:53:15
【问题描述】:
我有 2 个 CSV 文件 orders_by_user_backlog 和 orders_by_user_pivot。我想用 VBA 创建一个名为 Orders by Users Report 的 .xlsx 文件,其中包含 2 张工作表。
第一个工作表称为 backlog,我将复制 orders_by_user_backlog.csv 中的数据并将其粘贴到那里。
第二张称为数据透视表,我将从 orders_by_user_pivot.csv 复制数据并将其粘贴到那里,并使用新数据刷新同一工作表中的数据透视表。
我使用一个 .xlsx 文件作为模板,称为 Orders By Users 模板
这是我的代码
Sub Orders_by_User_report()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
'open the csv output from query orders by user backlog
Workbooks.Open FileName:="C:\Reports\orders_by_user_backlog.csv"
Cells.Select
Selection.Copy
Workbooks.Open FileName:= _
"C:\Reports\Report templates\Orders By Users Template.xlsx"
Sheets(1).Select
Cells.Select
ActiveSheet.Paste
'Bold and color top row, add autofilter, zoom 80% and autofit
Range("A1:H1").Select
Selection.Interior.Color = 255
Selection.Font.Bold = True
Selection.AutoFilter
ActiveWindow.Zoom = 80
Cells.Select
Cells.EntireColumn.AutoFit
'open the csv output from query orders by user pivot
Workbooks.Open FileName:="C:\Reports\orders_by_user_pivot.csv"
Cells.Select
Selection.Copy
Workbooks.Open FileName:= _
"C:\Reports\Report templates\Orders By Users Template.xlsx"
Sheets(2).Select
Cells.Select
ActiveSheet.Paste
'Bold and color top row, add autofilter, zoom 80% and autofit
Range("A1:D1").Select
Selection.Interior.Color = 255
Selection.Font.Bold = True
Selection.AutoFilter
ActiveWindow.Zoom = 80
Cells.Select
Cells.EntireColumn.AutoFit
'refresh pivot table
Sheets(2).Select
ActiveSheet.PivotTables("PivotTable1").PivotCache.Refresh
'save file as xlsx for the output
ActiveWorkbook.SaveAs FileName:= _
"C:\Reports\Orders by Users\Orders by Users Report " & ".xlsx" _
, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
ActiveWindow.Close
ActiveWindow.Close
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
我知道我的问题在哪里,它在“ActiveSheet”中,但我不知道如何解决它。每次我使用
ActiveSheet.Paste
或
ActiveSheet.PivotTables("PivotTable1").PivotCache.Refresh
它在第二个 ActiveSheet.Paste 中显示错误,当我评论这部分并尝试仅使用一个 CSV 文件时,它粘贴得很好,但随后它再次在 ActiveSheet.PivotTables 中停止。
任何人都可以建议我在我的代码中进行哪些更改吗?非常感谢。
【问题讨论】:
-
试试
ActiveSheet.PivotTables("PivotTable1").RefreshTable -
我之前尝试过,但它不起作用。问题出在 ActiveSheet 中,因为它从第二个 ActiveSheet.Paste 停止在那里运行
-
不要使用activesheet方法,这不是很好。明确定义您的工作表,即 Worksheet("Sheet1").PivotTables("PivotTable1")
-
@JuniorDev 如果您正在更新您的数据透视表的数据范围,那么您需要先更新您的
PivotCache,然后再更新您的PivotTable。