2014-04-02 83 views
0

我一直在嘗試創建子,它通過選擇幾個條形碼來幫助過濾商品清單。我知道我可以手動完成,但它非常漫長而令人沮喪,因爲大約有2000個獨特的條形碼。我記錄了一個宏,並在這裏發現了一些類似的答案,但是我收到一個錯誤「運行時錯誤'1004':應用程序定義的或對象定義的錯誤'當PI.value被賦值爲true或false時, .Visible = True; Pi.Visible =假」Excel VBA數據透視表通過條形碼過濾

代碼:

私人小組CommandButton1_Click()

Dim MyNames() As Variant 
Dim objPivotField As PivotField 
Dim i As Long 
Dim PI As PivotItem 
Set objPivotField = _ 
ActiveSheet.PivotTables("PivotTable1").PivotFields(Index:="[Prekė].[Barkodas].[Barkodas]") 
MyNames = Array("4770349225872", "4770033220077", "7622400004773") 
With ActiveSheet.PivotTables("PivotTable1").PivotFields(Index:="[Prekė].[Barkodas].[Barkodas]") 

    For i = LBound(MyNames) To UBound(MyNames) 

    For Each PI In .PivotItems 
     If PI.Name = MyNames(i) Then 
     PI.Visible = True 
    Else 
     PI.Visible = False 
    End If 
    Next PI 
    Next i 
End With End Sub 

而這裏的宏,我錄過濾:

ActiveSheet.PivotTables("PivotTable1").PivotFields(_ 
    "[Prekė].[Barkodas].[Barkodas]").VisibleItemsList = Array("", _ 
    "[Prekė].[Barkodas].&[4750398000132]", "", "[Prekė].[Barkodas].&[4046234141238]", _ 
    "[Prekė].[Barkodas].&[4770248342625]") 
+0

你能發佈更多關於數據透視表的設置嗎?我嘗試了一個與你的邏輯類似的小例子,它工作,但我用ActiveSheet.PivotTables(「PivotTable1」)。PivotFields(「Barkodas」) –

+0

此外,通過條形碼循環一次,檢查每個PivotItem對MyNames會更快比循環條碼三次,每次檢查一個條形碼 –

回答

0

作爲評價上面寫,這裏是我用於過濾與VBA透視表的方法:

pivot table setup

Option Explicit 
Sub FilterPivotTable() 

Dim PT1 As PivotTable 
Dim PT1Barkodas As PivotField 
Dim MyNames() As Variant 
Dim PivotIdx As Long 

'assign table, field and array values for easy reference 
Set PT1 = ActiveSheet.PivotTables("PivotTable1") 
Set PT1Barkodas = PT1.PivotFields("Barkodas") 
MyNames = Array("4770349225872", "4770033220077", "7622400004773") 

With PT1Barkodas 

    'loop through all the barcodes 
    For PivotIdx = 1 To PT1Barkodas.PivotItems.Count 

     'logic to check if the current barcode is in the MyNames array 
     If UBound(Filter(MyNames, .PivotItems(PivotIdx))) > -1 Then 
      IsInArray = True 
     Else 
      IsInArray = False 
     End If 

     'if the barcode was not in the MyNames array, hide it 
     If IsInArray = False Then 
      .PivotItems(PivotIdx).Visible = False 
     End If 

    Next PivotIdx 

End With 

End Sub 

運行此腳本根據MyNames過濾PivotTable1:

result

+0

嗨,謝謝你的回答。這似乎是這樣做的好辦法,但分配可見價值的時候,我得到一個錯誤,在這條線: '代碼如果IsInArray = false,那麼 .PivotItems(PivotIdx)。可見=假 結束如果' 「運行時錯誤'1004' 應用程序定義或對象定義的錯誤「 – user2179129

+0

此外,如果我使用」Barkodas「,而不是」[Prekė]。[Barkodas]。[Barkodas]「我在這條線上得到同樣的錯誤。 – user2179129

+0

嘿@ user2179129,無賴! 1004錯誤非常有趣。我很想幫助解決更多疑難問題,但您是否認爲可以發送數據透視表和數據源的截圖以幫助我更好地瞭解問題的過濾和來源? –

相關問題