Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 基于单元格引用的VBA更改OLAP透视表过滤器_Excel_Vba_Exception - Fatal编程技术网

Excel 基于单元格引用的VBA更改OLAP透视表过滤器

Excel 基于单元格引用的VBA更改OLAP透视表过滤器,excel,vba,exception,Excel,Vba,Exception,我对VBA比较陌生,所以在这里寻求帮助。我目前正在尝试设置一个宏,每当我更改特定单元格时,该宏会自动更改OLAP透视表中的过滤器。我目前拥有以下代码: Sub Update_Dates() ActiveSheet.PivotTables("IssuerListTest").PivotFields( _ "[Position Date].[Position Date].[Position Date]").VisibleItemsList = Array( _

我对VBA比较陌生,所以在这里寻求帮助。我目前正在尝试设置一个宏,每当我更改特定单元格时,该宏会自动更改OLAP透视表中的过滤器。我目前拥有以下代码:

Sub Update_Dates()
    ActiveSheet.PivotTables("IssuerListTest").PivotFields( _
        "[Position Date].[Position Date].[Position Date]").VisibleItemsList = Array( _
        "[Position Date].[Position Date].&[2019-06-30T00:00:00]", _
        "[Position Date].[Position Date].&[2019-09-30T00:00:00]")
End Sub

但是,我希望“2019-06-30”和“2019-09-30”分别从同一工作簿中单元格B1和B2中名为“配置表”的不同工作表中动态设置。我目前面临的另一个问题是我必须手动运行宏。有没有一种方法可以让人解释一下,一旦这些单元格中的日期发生变化,宏将如何自动运行?

尝试用以下内容替换sub:

Sub Update_Dates()
    Dim B1  As String
    Dim B2  As String

    B1 = Format(Sheets("Configuration Sheet").Range("B1").Value, "yyyy-mm-dd")
    B2 = Format(Sheets("Configuration Sheet").Range("B2").Value, "yyyy-mm-dd")

    ActiveSheet.PivotTables("IssuerListTest").PivotFields( _
        "[Position Date].[Position Date].[Position Date]").VisibleItemsList = Array( _
        "[Position Date].[Position Date].&[" & B1 & "T00:00:00]", _
        "[Position Date].[Position Date].&[" & B2 & "T00:00:00]")
End Sub
如果您想在每次更改B1或B2单元格时运行此子模块,则需要在“配置表”表模块中添加事件子模块,如

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Me.Range("B1:B2")) Is Nothing Then
        Call Update_Dates
    End If
End Sub
但是。。在这种情况下,您应该在Update_Dates()子文件中将Activesheet替换为Sheets(您的SheetWithPivotTableName)