Excel 无法获取数据透视表类的PivotFields属性-不确定我的操作是否有误

Excel 无法获取数据透视表类的PivotFields属性-不确定我的操作是否有误,excel,vba,filter,pivot,Excel,Vba,Filter,Pivot,我正在寻找一种基于机器类型筛选数据透视表的方法(我将该字段拖到数据透视表的筛选框中)。我以前使用过下面的公式,但它仍然有效,但是,我收到一个错误,即“1004:无法获取数据透视表类的PivotFields属性 任何帮助都将不胜感激,我已经在这个项目上工作了很长一段时间,这是我需要完成它的最后一步。(仅供参考单元格A1有我要筛选的机器名称) 你在这条线上看到错误了吗 Set pf = pt.PivotFields("Machine") 我认为可能没有一个数据透视字段的名字 尝试在该行之前添加此

我正在寻找一种基于机器类型筛选数据透视表的方法(我将该字段拖到数据透视表的筛选框中)。我以前使用过下面的公式,但它仍然有效,但是,我收到一个错误,即“1004:无法获取数据透视表类的PivotFields属性

任何帮助都将不胜感激,我已经在这个项目上工作了很长一段时间,这是我需要完成它的最后一步。(仅供参考单元格A1有我要筛选的机器名称)


你在这条线上看到错误了吗

 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