我正在尝试过滤 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 的行处给出错误,并显示“编译错误:参数不可选”
知道如何克服这个问题吗?
这是一个简单的问题 - 但是您将我们与“OLAP Cube”之类的术语混淆了。你的问题是你想使用一个名为
val
的变量而不声明它。
val
是一个 VBA 函数(将字符串转换为数字)。如果您坚持,您可以使用该名称声明一个变量,这将“隐藏”该函数,并且您可以像任何其他变量一样在代码中使用该变量。
如果您不声明变量(并且不使用
Option Explicit
),VBA 运行时将自动动态创建变量。但是,在您的情况下,VBA 运行时假定您要使用函数 val
,并且该函数有一个强制参数(要转换的字符串),这就是您收到 Argument not optional
错误的原因。
始终使用
Option Explicit
声明所有变量
避免使用 VBA 已使用的变量(或例程)名称。
提示:当您遇到这样的编译器错误时,请按[Shift]+[F2]跳转到定义。这通常会揭示错误的原因(在您的情况下,您会看到有一个具有该名称的内置函数):