提问人:Eric Aguirre 提问时间:7/15/2023 最后编辑:Mayukh BhattacharyaEric Aguirre 更新时间:7/15/2023 访问量:46
通过 VBA 将 PivotFields.CurrentPage 设置为不存在的项会覆盖其他项之一(无运行时错误)
Setting PivotFields.CurrentPage through VBA to a non-existent item overwrites one of the other items (no runtime error)
问:
我目前习惯于通过VBA管理数据透视表。我的代码的核心取决于手动更改数据透视表字段的当前页面,每当我尝试将其设置为数据透视表中不存在的名称时,它都会返回运行时错误。 现在,创建一个新的简单子,我将数据透视字段设置为项目列表,但每当其中一个未包含在数据透视表中时,它就会覆盖当前数据透视表,代码会重复该值。结果示例
最糟糕的是,数据透视字段中的项目被覆盖,完全损坏了数据透视表(我必须恢复文档的先前版本才能修复它)。没有“Ixachi-8”,但该条目入字段,取代了 Ixachi-35
数据对应于 Ixachi-35,但过滤器现在仅将其称为“Ixachi-8”
代码:
Sub qomaxs()
Dim lista As Worksheet
Dim td As Worksheet
Worksheets("Gráficos").EnableCalculation = False
Worksheets("Gráficos-seguimiento").EnableCalculation = False
On Error Resume Next
Set lista = Worksheets("Lista")
Set td = Worksheets("TD")
For i = 1 To 50
pozo = lista.Range("P" & i).Value
td.PivotTables("TablaDinámica1").PivotFields("Pozo").CurrentPage = pozo
0
pozo2 = td.Range("B7").Value
If pozo <> pozo2 Then
GoTo 0
Else
fila = td.Range("AA11").Value
qomax = td.Range("Y11").Value
fecha = td.Range("Z11").Value
est = td.Range("B" & fila).Value
lista.Range("Q" & i).Value = pozo
lista.Range("R" & i).Value = est
lista.Range("S" & i).Value = fecha
End If
Next i
End Sub
我想知道这个问题是由于我忽略了某些东西,还是实际文件已损坏,因此行为不正常(返回运行时错误)。这很关键,因为数据会被覆盖,如果我不看,将导致很大的错误。
答: 暂无答案
评论
On Error Resume Next
应该只用于您预计可能会导致错误的特定行 - 像这样使用它不是一个好主意。