2016-12-01 22 views
0

我一直在使用Excel和VBA,並且試圖找出如何從切片器中取消選擇各個字段並僅選擇少量字段。 我嘗試讀取切片器Cache,然後遍歷切片器中的各種項目。我能夠讀取切片機內物品的值,但我無法取消選擇它們。它不斷拋出錯誤代碼爲1004的「應用程序定義或對象定義的錯誤」。無法將VBA切片器選定的屬性值設置爲False

我在分享我遇到困難的代碼段。

Sub SelectFiscalWeeks() 

Dim slcCache As SlicerCache 
Dim slcItem As SlicerItem 

FalseVar = False 
Application.StatusBar = "Filtering out last 13 Week's Data" 

Set slcCache = ThisWorkbook.SlicerCaches("Slicer_Date.Fiscal_Week") 

slcCache.ClearManualFilter 

For Index = 1 To slcCache.SlicerCacheLevels.Count 
    Worksheets("A").Cells(Index + 1, "N").Value = Index 

    j = 0 
    For Each slcItem In slcCache.SlicerCacheLevels(Index).SlicerItems 
     Worksheets("A").Cells(j + 1, "P").Value = slcItem.Name 
     j = j + 1 
     slcItem.Selected = FalseVar 
    Next 
Next 

'Set slcCache.VisibleSlicerItems = Array("[DT].[FW].&[201701]") 

Set slcCache = Nothing 
Application.StatusBar = False 

End Sub 

在上面的代碼,我能夠通過使用slcItem.Name閱讀切片項目名稱,但我無法既可以執行下面的語句:

slcItem.Selected = FalseVar 
Set slcCache.VisibleSlicerItems = Array("[DT].[FW].&[201701]") 

執行這些語句拋出了錯誤「應用程序定義或對象定義的錯誤」與錯誤代碼1004.

我一直在嘗試調試超過一個小時,但無法找出原因。這可能是一些基本的東西,但是你能幫我確定我的代碼可能有什麼問題嗎?

回答

2

是的,我一直在調試幾個小時,你有同樣的問題。 最後我發現我應該使用VisibleSlicerItems而不是設置.selected爲true/false。

嘗試slcCache.VisibleSlicerItems = Array(「[DT]。[FW]。& [201701]」)without Set。

這裏是我的代碼作爲例子。 希望可以幫助你。

Option Explicit 

Sub Test() 
Dim sc As SlicerCache 
Dim si As SlicerItem 
Dim list As Variant 


Set sc = ActiveWorkbook.SlicerCaches("Slicer_product_name") 

    For Each si In sc.SlicerCacheLevels(1).SlicerItems 
     If InStr(si.Value, "Boxers") > 0 Then 
      'this if loop creates an Array for VisibleSlicerItems 
      If IsEmpty(list) Then 
       list = Array(si.Name) 
      Else 
       ReDim Preserve list(UBound(list) + 1) 
       list(UBound(list)) = si.Name 
      End If 
     End If 
    Next 

sc.VisibleSlicerItemsList = list 

End Sub 
相關問題