使用GetPivotData读取数据时遇运行时错误1004求助
解决GetPivotData运行时错误1004的方案
核心错误修正
你的代码直接将GetPivotData的结果赋值给Range变量,但GetPivotData返回的是单元格值或Variant对象,并非Range类型,这是触发1004错误的直接原因。另外,对象类型变量赋值需使用Set,但如果仅需提取数值,无需用Range变量存储。
修正后的基础代码
Dim shtHOURs As Worksheet Dim ptblHoursPivot As PivotTable Dim varianceValue As Variant ' 用Variant兼容数值、空值等情况 Set shtHOURs = ActiveWorkbook.Worksheets("Hours") Set ptblHoursPivot = shtHOURs.PivotTables(1) ' 提取值,注意字段与项的格式匹配 varianceValue = ptblHoursPivot.GetPivotData("Variance - Hours", "PROJID", 6726)
额外排查点(若仍报错)
- 字段名称完全匹配:检查数据透视表中"Variance - Hours"、"PROJID"的名称是否和代码一致,包括空格、大小写、特殊符号,避免隐藏空格导致不匹配。
- 数据类型匹配:若PROJID是数值型字段,代码中直接写
6726即可;若为文本型,再用"6726"包裹。 - 数据存在性验证:确认数据透视表中确实存在PROJID为6726的项,且"Variance - Hours"已添加到数据区域。
扩展写法(带错误处理)
如果要避免因数据不存在导致的报错,可添加错误捕获逻辑:
Dim shtHOURs As Worksheet Dim ptblHoursPivot As PivotTable Dim varianceValue As Variant Set shtHOURs = ActiveWorkbook.Worksheets("Hours") Set ptblHoursPivot = shtHOURs.PivotTables(1) On Error Resume Next ' 临时忽略错误 varianceValue = ptblHoursPivot.GetPivotData("Variance - Hours", "PROJID", 6726) On Error GoTo 0 ' 恢复默认错误捕获 If IsEmpty(varianceValue) Then MsgBox "未找到匹配的数据" Else MsgBox "提取的值为:" & varianceValue End If
内容的提问来源于stack exchange,提问作者Ian Cox
相关产品推荐
相关产品推荐

