You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBA生成图表时偶发数据源错误问题求助

VBA生成图表时偶发数据源错误问题求助

我现在正在用VBA开发一个数据排序和报表生成工具,流程是按特定条件把排序后的数据放到「IP」工作表,再基于这些数据创建两个透视表,最后用透视表生成两张图表。

目前两个透视表和其中一张图表都能正常工作,但另一张图表偶尔会和第一张显示完全一样的数据——我根本没修改它的数据源啊!更离谱的是,同一个代码连续运行好几次,不加任何改动,有时候生成的图表是对的,有时候就出错了。我还截了错误和正确状态下的图表:

错误图表
正确图表

下面是我的代码,麻烦各位帮忙看看哪里出问题了:

Sub IPReport()

Dim PTCache As PivotCache, PT As PivotTable, LRow As Integer, LCol As Integer, sum As Single

Sheets("IP").Activate

LRow = Range("A1048576").End(xlUp).Row

LCol = Range("XFD1").End(xlToLeft).Column

LRowP = Range("V1").End(xlDown).Row

Set Size = Range(Cells(1, 1), Cells(LRow, 10))

Set PTCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=Size)

On Error Resume Next

ActiveSheet.ChartObjects.Delete

On Error GoTo 0

'deleting graphs if they already exist

If LRow >= 3 Then

Dim wsWorksheet As Worksheet

Set wsWorksheet = Worksheets("IP")

On Error Resume Next

wsWorksheet.PivotTables("Data").TableRange2.Clear

wsWorksheet.PivotTables("1Shift").TableRange2.Clear

'statement that deletes pivot tables that already exsist

Set PT = ActiveSheet.PivotTables.Add(PivotCache:=PTCache, TableDestination:=Range("L1"), TableName:="Data")

Worksheets("IP").PivotTables(1).AddFields ColumnFields:=Array("Shift"), RowFields:=Array("Part Desc")

ActiveSheet.PivotTables("Data").AddDataField ActiveSheet.PivotTables("Data").PivotFields("Total $"), "$ for part", xlSum

With ActiveSheet.PivotTables("Data").PivotFields("$ for part")

.NumberFormat = "$#,##0.00"

End With

'$ pivot table

Set PT = ActiveSheet.PivotTables.Add(PivotCache:=PTCache, TableDestination:=Range("V1"), TableName:="1Shift")

Worksheets("IP").PivotTables(1).AddFields ColumnFields:=Array("Shift"), RowFields:=Array("Part Desc")

ActiveSheet.PivotTables("1Shift").AddDataField ActiveSheet.PivotTables("1Shift").PivotFields("Quantity"), "Part Quantities", xlSum

'Quantity pivot table

Dim LRowd As Integer

Dim QChart As ChartObject

LRow = Range("V1").End(xlDown).Row

LRowM = Range("L1").End(xlDown).Row

Set QChart = Sheets("IP").ChartObjects.Add(Left:=682, Width:=600, Top:=700, Height:=400)

QChart.Chart.SetSourceData Source:=Sheets("IP").Range(Cells(3, 22), Cells(LRow - 1, 25))

QChart.Chart.ChartType = xlColumnClustered

QChart.Chart.SetElement (msoElementChartTitleAboveChart)

QChart.Chart.ChartTitle.Text = "Total Amount of Defects"

QChart.Chart.SetElement msoElementDataLabelShow

'creating column chart

Else: MsgBox ("Insufficient data for report")

End If

End Sub

我怀疑是不是透视表的缓存或者生成顺序有问题?或者是我指定图表数据源的方式不对?毕竟有时候能正常运行,有时候不行,这种偶发的问题实在太头疼了。

备注:内容来源于stack exchange,提问作者AidanB17

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 10:19:39