过滤 OLAP 多维数据集,从很长的列表中排除两个值

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

我正在尝试过滤 OLAP 多维数据集,以便从特定列 2 中排除值。该列中唯一值的数量非常多(数千个)。

这是我正在使用的代码,但它给了我一个错误:

Sub FilterOLAPCube()
    Dim pt As PivotTable
    Dim pf As PivotField
    Dim excludeValues As Variant
    Dim filterCriteria As String
    
    excludeValues = Array("value1", "value2") ' Values to exclude
    filterCriteria = ""
    
    For Each Val In excludeValues
        filterCriteria = filterCriteria & Val & ","
    Next Val
    
    filterCriteria = Left(filterCriteria, Len(filterCriteria) - 1) ' Remove the last comma
    
    Set pt = ActiveSheet.PivotTables("PivotTable1") ' Change PivotTable name as needed
    Set pf = pt.PivotFields("[MasterData Publisher Groups].[Publisher Group].[Publisher Group]") ' Change [Field Name] to the actual field name
    
    ' Clear any existing filters on the field
    pf.ClearAllFilters
    
    ' Filter out specific values
    pf.PivotFilters.Add Type:=xlCaptionDoesNotEqual, Value1:=filterCriteria
End Sub

Sub filterMacro()
'
' filter Makro
'
'

    FilterOLAPCube
        
    
End Sub

当尝试逐步排除/调试代码时,它在调用函数 FilterOLAPCube 的行处给出错误,并显示“编译错误:参数不可选”

知道如何克服这个问题吗?

excel vba ssas olap-cube
1个回答
0
投票

这是一个简单的问题 - 但是您将我们与“OLAP Cube”之类的术语混淆了。你的问题是你想使用一个名为

val
的变量而不声明它。

val
是一个 VBA 函数(将字符串转换为数字)。如果您坚持,您可以使用该名称声明一个变量,这将“隐藏”该函数,并且您可以像任何其他变量一样在代码中使用该变量。

如果您不声明变量(并且不使用

Option Explicit
),VBA 运行时将自动动态创建变量。但是,在您的情况下,VBA 运行时假定您要使用函数
val
,并且该函数有一个强制参数(要转换的字符串),这就是您收到
Argument not optional
错误的原因。

  • 始终使用

    Option Explicit

  • 声明所有变量

  • 避免使用 VBA 已使用的变量(或例程)名称。

提示:当您遇到这样的编译器错误时,请按[Shift]+[F2]跳转到定义。这通常会揭示错误的原因(在您的情况下,您会看到有一个具有该名称的内置函数):

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.