本帖最后由 kathyml 于 2025-3-2 10:01 编辑
我有两个文件,数据源.xlsm 及报表.xlsm。两个文件在同一目录下,报表中的透视表根据数据源变化而更新。我有个宏代码,报表文件中的透视表的数据源行数,会根据数据源的文件的记录行数增加而变动。 数据源文件的数据范围是从第二行开始。 以下是宏代码。这个程序有个问题: 用F8单步执行时,透视表的行数会变化 。但用F5运行宏时,透视表的行数不变。注:程序运行时,Msgbox显示的是变动后的行数,但透视表中,数据源行数并没有改变。 我求助Deepseek,Deepseek写了很多文件位置判断、文件判断,时间延迟及清理缓存等语句,还是不能解决问题。 求助大师帮忙解决这个棘手的问题。谢谢!
Sub 宏113() '刷新付款统计 DimwsData As Worksheet Dim wspPivot As Worksheet Dim pt As PivotTable Dim lastRow As Long Dim lastCol As Long Dim sourceRange As String Dim filepath As String Dim wbData As Workbook
filepath = "d:\公司数据\数据源.xlsm" Set wbData = Workbooks.Open(filepath) Set wsData = wbData.Sheets("付款记录")
Set wspivot =ThisWorkbook.Worksheets("付款统计") '透视表所在工作表 Set pt = wspivot.PivotTables("付款信息") '透视表名称
'确定数据源的最后一行和最后一列 With wsData lastRow = .Cells(.Rows.Count, 2).End(xlUp).Row + 100 '假设第一列有数据 lastCol = .Cells(2, .Columns.Count).End(xlToLeft).Column '假设标题在第一行 '使用A1样式: sourceRange = .Name & "!A2:" & Split(.Cells(2,lastCol).Address, "$")(1) & lastRow End With
'更新透视表的源数据 On Error Resume Next pt.ChangePivotCacheThisWorkbook.PivotCaches.Create( _ SourceType:=xlDatabase, _ SourceData:=sourceRange) On Error GoTo 0
'刷新透视表 pt.RefreshTable
MsgBox wspivot.Name & " 已更新至" & lastRow & "行。透视表已刷新。"
Workbooks.Open Filename:="d:\公司数据\报表.xlsm" Sheets("付款统计").Select Range("c5").Select
End Sub
|