应用程序定义和对象定义错误

问题描述 投票:0回答:1

我有一个带有区域名称的数据透视表。我想使用 (-) 连字符分隔符提取文件名。并选择带有文件名的切片器项目。文件名提取工作正常,但选择不起作用。 这是我的代码:

Option Explicit

Sub Macro2()
    '
    ' Macro2 Macro
    '
    ' Keyboard Shortcut: Ctrl+q
    '
    Spl
End Sub

Public Function Spl()
    Dim wbName As String
    Dim fileName As String
    'Get the workbook name
    wbName = ActiveWorkbook.Name
    'Split the workbook name by the dash character
    fileName = Split(wbName, "-")(0)
    'Call the subroutine for each slicer cache
    SelectSlicerItems "Slicer_Area", fileName
    
End Function

Sub SelectSlicerItems(slicerName As String, fileName As String)
    Dim sc As SlicerCache
    Dim si As SlicerItem
    Dim index As Integer
    'Set the slicer cache object
    Set sc = ActiveWorkbook.SlicerCaches(slicerName)
    'Loop through the slicer items
    For index = 1 To sc.SlicerCacheLevels.Count
        For Each si In sc.SlicerCacheLevels(index).SlicerItems
            If si.Name = fileName Then
                si.Selected = True
            Else
                si.Selected = False
            End If
        Next si
    Next index
End Sub

我想从文件名中分离区域名称,并根据切片器上的区域名称应用过滤器。

答案: 由于数据模型的原因,我们必须以这种方式使用。感谢另一位用户提供的答案链接。

Sub sliceit()
'
' sliceit Macro
'

'
    Dim wbName As String
    Dim fileName As String
    'Get the workbook name
    wbName = ActiveWorkbook.Name
    'Split the workbook name by the dash character
    fileName = Split(wbName, "-")(0)
    'Call the subroutine for each slicer cache
    
    ActiveWorkbook.SlicerCaches("Slicer_Area").VisibleSlicerItemsList = Array( _
        "[Range].[Area].&[" + fileName + "]")
    ActiveWorkbook.SlicerCaches("Slicer_Area1").VisibleSlicerItemsList = Array( _
        "[Table2].[Area].&[" + fileName + "]")
    Sheets(Array("Summary", "TT Wise ", "DB Wise", "Route Wise ")).Select
    Sheets("Summary").Activate
    Cells.Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False
    
End Sub
excel vba pivot slicers
1个回答
0
投票

由于数据模型的原因,我们必须以这种方式使用。感谢Shrotter提供的答案链接 这是完成的代码。

Sub sliceit()
'
' sliceit Macro
'

'
    Dim wbName As String
    Dim fileName As String
    'Get the workbook name
    wbName = ActiveWorkbook.Name
    'Split the workbook name by the dash character
    fileName = Split(wbName, "-")(0)
    'Call the subroutine for each slicer cache
    
    ActiveWorkbook.SlicerCaches("Slicer_Area").VisibleSlicerItemsList = Array( _
        "[Range].[Area].&[" + fileName + "]")
    ActiveWorkbook.SlicerCaches("Slicer_Area1").VisibleSlicerItemsList = Array( _
        "[Table2].[Area].&[" + fileName + "]")
    Sheets(Array("Summary", "TT Wise ", "DB Wise", "Route Wise ")).Select
    Sheets("Summary").Activate
    Cells.Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False
    
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.