Excel 无法获取数据透视表类的PivotFields属性-不确定我的操作是否有误
我正在寻找一种基于机器类型筛选数据透视表的方法(我将该字段拖到数据透视表的筛选框中)。我以前使用过下面的公式,但它仍然有效,但是,我收到一个错误,即“1004:无法获取数据透视表类的PivotFields属性 任何帮助都将不胜感激,我已经在这个项目上工作了很长一段时间,这是我需要完成它的最后一步。(仅供参考单元格A1有我要筛选的机器名称)Excel 无法获取数据透视表类的PivotFields属性-不确定我的操作是否有误,excel,vba,filter,pivot,Excel,Vba,Filter,Pivot,我正在寻找一种基于机器类型筛选数据透视表的方法(我将该字段拖到数据透视表的筛选框中)。我以前使用过下面的公式,但它仍然有效,但是,我收到一个错误,即“1004:无法获取数据透视表类的PivotFields属性 任何帮助都将不胜感激,我已经在这个项目上工作了很长一段时间,这是我需要完成它的最后一步。(仅供参考单元格A1有我要筛选的机器名称) 你在这条线上看到错误了吗 Set pf = pt.PivotFields("Machine") 我认为可能没有一个数据透视字段的名字 尝试在该行之前添加此
你在这条线上看到错误了吗
Set pf = pt.PivotFields("Machine")
我认为可能没有一个数据透视字段的名字
尝试在该行之前添加此项,以检查有哪些名称:
For Each pf In pt.PivotFields
Debug.Print (pf.Name)
Next pf
编辑以获取其他选项:
它可能与pivot缓存有关。您可以尝试在同一位置调用sub(下面)
Sub RefreshAllPivotCaches()
' Developed by Contextures Inc.
' www.contextures.com
Dim wb As Workbook
Dim lPCs As Long
Dim lPC As Long
Dim lProb As Long
Set wb = Application.ThisWorkbook
lPCs = wb.PivotCaches.Count
For lPC = 1 To lPCs
wb.PivotCaches(lPC).Refresh
If Err.Number <> 0 Then
MsgBox "Could not refresh pivot cache " & lPC _
& vbCrLf _
& "Error: " _
& vbCrLf _
& Err.Description
Err.Clear
lProb = lProb + 1
End If
Next lPC
MsgBox "Refresh is complete. " _
& vbCrLf _
& "Pivot Cache Count: " & lPCs _
& vbCrLf _
& "Failed refreshes: " & lProb
End Sub
如果它确实有效,并且您以某种方式将其包括在内,您可能会希望注释掉,或者交换MsgBoxes中的Debug.Prints。这对您的问题没有帮助,但是在循环之前,将其设置为
False
肯定会提高速度。我添加了上面的行(复制并粘贴)就在“Dim pf As PivotField”和Set pf=pt.PivotFields(“Machine”)之间,但是我仍然收到Set pf行的错误消息。Machine字段在我的Pivot表中(我可以将其设置为列、筛选器等-目前我将其设置为filters)。
Sub RefreshAllPivotCaches()
' Developed by Contextures Inc.
' www.contextures.com
Dim wb As Workbook
Dim lPCs As Long
Dim lPC As Long
Dim lProb As Long
Set wb = Application.ThisWorkbook
lPCs = wb.PivotCaches.Count
For lPC = 1 To lPCs
wb.PivotCaches(lPC).Refresh
If Err.Number <> 0 Then
MsgBox "Could not refresh pivot cache " & lPC _
& vbCrLf _
& "Error: " _
& vbCrLf _
& Err.Description
Err.Clear
lProb = lProb + 1
End If
Next lPC
MsgBox "Refresh is complete. " _
& vbCrLf _
& "Pivot Cache Count: " & lPCs _
& vbCrLf _
& "Failed refreshes: " & lProb
End Sub
Setpf:
Dim CachesCleared as Boolean
On Error Goto ClearPivotCache
Set pf = pt.PivotFields("Machine")
Goto FieldsAreGood ' no need to clear if it's working
ClearPivotCache:
On Error Goto 0 ' reset error handling
If not CachesCleared Then ' only try clearing once, no infinite loops
Call RefreshAllPivotCaches
CachesCleared = True
Goto SetPF
Endif
FieldsAreGood:
On Error Goto 0 ' reset error handling
' The rest of your code