Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 运行时错误-2147024809(80070057)-透视表字段名无效_Vba_Excel - Fatal编程技术网

Vba 运行时错误-2147024809(80070057)-透视表字段名无效

Vba 运行时错误-2147024809(80070057)-透视表字段名无效,vba,excel,Vba,Excel,另一个Excel VBA宏按钮问题 我正在尝试制作一个按钮来刷新工作表上的所有轴(共有四个)。我以前去过StackOverflow,收到了一个效果很好的解决方案。我获取了以前提供的代码,并为新工作簿更新了它,但以下函数失败。ChangePivotCache PvtCache: Sub Button1_Click() Dim PvtTbl As PivotTable Dim PvtCache As PivotCache Dim Pv

另一个Excel VBA宏按钮问题

我正在尝试制作一个按钮来刷新工作表上的所有轴(共有四个)。我以前去过StackOverflow,收到了一个效果很好的解决方案。我获取了以前提供的代码,并为新工作簿更新了它,但以下函数失败。ChangePivotCache PvtCache:

Sub Button1_Click()

Dim PvtTbl                  As PivotTable
Dim PvtCache                As PivotCache
Dim PvtDataRng              As Range

Set PvtDataRng = Worksheets("OTR_Promo_List_ADV_2017").Range("B2:AU500")

Set PvtCache = ActiveWorkbook.PivotCaches.Add(xlDatabase, PvtDataRng)

Set PvtTbl = Worksheets("Desired_Distribution").PivotTables("PivotTable1")

For Each PvtTbl In Worksheets("Desired_Distribution").PivotTables

    Set PvtCache = ActiveWorkbook.PivotCaches.Add(xlDatabase, PvtDataRng)

    With PvtTbl
        .ChangePivotCache PvtCache
        .RefreshTable
    End With

    Set PvtCache = Nothing

Next PvtTbl

End Sub
唯一的区别是工作簿已更改,现在我想刷新4个数据透视,而不是2个数据透视-这可能是问题所在吗

下面是一个屏幕截图,您可以看到工作表。“OTR\U促销列表\U ADV-2017”是数据库。数据透视表具有默认命名,我没有更改名称(即数据透视表1、数据透视表2…)


谢谢

用于在一张工作表上刷新所有透视表的代码似乎过于复杂。我不太明白您为什么要使用
.changeprovotcache
。它更改指定透视表的数据源。如果您只想刷新透视表,那是完全没有道理的

您可以使用Excel表对象作为数据透视表的数据源,然后进行简单的刷新即可。或者,如果您不想使用表(尽管出于明显的原因,您可能真的想查看表),您可以使用动态范围名称来定义透视源。使用这两种技术,您只需要刷新数据透视表,而不必使用VBA操作数据透视缓存

使用表或动态范围名称作为数据透视表的源,您可以通过循环使用表或动态范围名称刷新工作表上的所有数据透视表,并使用以下代码行刷新这些数据透视表:

Sub RefreshPivotsOnSheet()
    Dim ws As Worksheet
    Dim pt As PivotTable
    Set ws = Worksheets("MySheet")
    For Each pt In ws.PivotTables
        pt.RefreshTable
    Next pt
End Sub

编辑:如何将Excel表格设置为数据透视的数据源:使用Ctrl+T或Insert>table将源数据转换为表格。然后编辑数据透视表数据源,并将其指向刚刚创建的Excel表。

我可以关闭此主题。我在其他地方找到了一个简单的宏,它只显示:

Sub REFRESH()
'
' REFRESH Macro
'

'
    ActiveWorkbook.RefreshAll
End Sub
他似乎成功了


感谢您的所有投入

我记得这一点,但我的代码有点不同。首先,对于每个PvtTbl…循环,在
之前不需要两行
Set PvtCache
Set PvtTbl
。其次,如果您的
范围
不是动态的(范围(“B2:AU500”是静态的),为什么需要运行此代码?我不知道,我只是复制并粘贴了此处提供的内容…我尝试使用此处提供的代码,但在“pt.refreshttable”部分失败,运行时错误为1004“数据透视表字段名无效”。我可能遗漏了一些内容,因为我不确定如何将Excel表对象设置为数据源…我添加了有关数据透视源的表的说明。该代码在我的场景中运行良好。您的数据透视表字段名是什么?错误表明其中一个字段名无效,因此您可能希望检查字段名是否存在命名问题。伙计…有人给了我这个网站上的另一个宏。我是一个完全的VBA新手。我不是在抱怨…只是说,对一个完全是VBA n00b的人施压寻求帮助有点…没有帮助。我复制的代码与我之前在这里问过的一个类似问题直接相关。