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

Pivot Drilldown Macro遇非连续数值报Run-Time error '1004'如何解决

解决方案

报错的核心原因是可见的PivotItem在当前透视表筛选状态下无对应数据条目,DataRange属性不存在,直接调用就会触发1004运行时错误。
只需在原有代码逻辑中增加临时错误捕获,无有效数据的项自动跳过即可,同时保留自定义工作表命名逻辑,修改后的代码如下:

Dim pField As PivotField
Dim pItem As PivotItem
' 指定要操作的透视表字段
Set pField = Sheets("Pivot Table").PivotTables(1).PivotFields("HFB")

Application.ScreenUpdating = False

' 遍历字段下所有项
For Each pItem In pField.PivotItems
    If pItem.Visible Then
        ' 临时开启错误忽略,校验DataRange是否存在
        On Error Resume Next
        Dim testRange As Range
        Set testRange = pItem.DataRange
        ' 错误码不为0说明无有效DataRange,直接跳过当前项
        If Err.Number = 0 Then
            pItem.DataRange.ShowDetail = True
            ' 重命名前校验名称合法性、避免重名冲突
            If Len(Right(pItem.Name, 4)) > 0 And Not SheetExists(Right(pItem.Name, 4)) Then
                ActiveSheet.Name = Right(pItem.Name, 4)
            End If
        End If
        ' 恢复默认错误捕获,避免其他异常被静默忽略
        On Error GoTo 0
        Set testRange = Nothing
    End If
Next pItem

Application.ScreenUpdating = True

' 辅助函数:判断工作表是否已存在
Function SheetExists(sheetName As String) As Boolean
    Dim ws As Worksheet
    On Error Resume Next
    Set ws = ThisWorkbook.Sheets(sheetName)
    On Error GoTo 0
    SheetExists = Not ws Is Nothing
End Function

优化说明

  • 新增DataRange有效性校验逻辑,无数据的项直接跳过,彻底解决1004报错问题
  • 新增工作表重名、非法名称校验,避免重命名环节触发额外错误
  • 完全保留原有自定义工作表命名规则,不会生成默认的Sheet 1类名称

内容的提问来源于stack exchange,提问作者Paul Flood

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:36:02