错误 1004 - 使用变量而不是硬代码时无法在 OLAP 多维数据集中找到项目
Error 1004 - item could not be found in OLAP cube when using variables instead of hard codes
我需要从链接到外部数据源的 Excel 文件中的数据透视表 table 复制数据。难点在于 select 主元字段中的句点。
宏应该以一个输入框开始,供用户输入日期,这样宏就可以select月份进行进一步处理。
YearMonth = InputBox("Input Year & Month of the report, e.g. 202007", "Input Year & Month")
yr = Left(YearMonth, 4)
mth = Right(YearMonth, 2)
If mth = "01" Then longmth = "JAN"
If mth = "02" Then longmth = "FEB"
If mth = "03" Then longmth = "MAR"
If mth = "04" Then longmth = "APR"
If mth = "05" Then longmth = "MAY"
If mth = "06" Then longmth = "JUN"
If mth = "07" Then longmth = "JUL"
If mth = "08" Then longmth = "AUG"
If mth = "09" Then longmth = "SEP"
If mth = "10" Then longmth = "OCT"
If mth = "11" Then longmth = "NOV"
If mth = "12" Then longmth = "DEC"
数据透视字段的名称是“年”。此过滤器适用于 select 年份,分为季度,然后分为月份(如下图所示)
由于我不确定如何将其编码为 select 正确的月份,因此我尝试通过 select 仅记录“2020 年 8 月”来记录宏以供参考。下面是记录的代码:
ActiveSheet.PivotTables("PivotTable1").PivotFields("[Time].[Time].[Year]"). _
VisibleItemsList = Array("")
ActiveSheet.PivotTables("PivotTable1").PivotFields("[Time].[Time].[Quarter]"). _
VisibleItemsList = Array("")
ActiveSheet.PivotTables("PivotTable1").PivotFields("[Time].[Time].[Month]"). _
VisibleItemsList = Array("[Time].[Time].[Month].&[2020 AUG]")
我想我可以创建一个变量(下面的 ExactDate
),以便 selection 标准基于 InputBox 中的条目(例如 202008 --> 转换为“2020 AUG” , 依此类推)
'Select the relevant month and year on the pivot table
ExactDate = yr + " " + longmth
With ActiveSheet.PivotTables("PivotTable1")
.PivotFields("[Time].[Time].[Year]").VisibleItemsList = Array("")
.PivotFields("[Time].[Time].[Quarter]").VisibleItemsList = Array("")
.PivotFields("[Time].[Time].[Month]").VisibleItemsList = Array("[Time].[Time].[Month].&[ExactDate]")
它抛出
"Run-time error '1004':
The item could not be found in the OLAP Cube."
在调试中,这段代码高亮显示
.PivotFields("[Time].[Time].[Month]").VisibleItemsList = Array("[Time].[Time].[Month].&[ExactDate]")
我用硬代码替换了变量ExactDate
(任何年份和月份,如下所示):
.PivotFields("[Time].[Time].[Month]").VisibleItemsList = Array("[Time].[Time].[Month].&[2019 SEP]")
而且有效。
正文相同;唯一的区别是固定值与分配变量。
为了回答为什么需要双引号和符号的问题,这里是我的完整答案:
在 VBA 中,您使用 Dim
语句声明变量(至少是推荐的方式)。
因此,在您的情况下,此行应该作为 良好做法:
Dim ExactDate as String
然后,文字字符串应该用双引号括起来。
在你的情况下,像这样:
"[Time].[Time].[Month].&["
为了连接两个字符串或一个字符串和一个变量,您可以使用符号 &
因此,完成代码中的示例后,要过滤 VisibleItemsList
的字符串将是:
Array("[Time].[Time].[Month].&[" & ExactDate & "]"
由于 ExactDate
表示一个字符串,因此连接将起作用。
希望解释清楚。
我需要从链接到外部数据源的 Excel 文件中的数据透视表 table 复制数据。难点在于 select 主元字段中的句点。
宏应该以一个输入框开始,供用户输入日期,这样宏就可以select月份进行进一步处理。
YearMonth = InputBox("Input Year & Month of the report, e.g. 202007", "Input Year & Month")
yr = Left(YearMonth, 4)
mth = Right(YearMonth, 2)
If mth = "01" Then longmth = "JAN"
If mth = "02" Then longmth = "FEB"
If mth = "03" Then longmth = "MAR"
If mth = "04" Then longmth = "APR"
If mth = "05" Then longmth = "MAY"
If mth = "06" Then longmth = "JUN"
If mth = "07" Then longmth = "JUL"
If mth = "08" Then longmth = "AUG"
If mth = "09" Then longmth = "SEP"
If mth = "10" Then longmth = "OCT"
If mth = "11" Then longmth = "NOV"
If mth = "12" Then longmth = "DEC"
数据透视字段的名称是“年”。此过滤器适用于 select 年份,分为季度,然后分为月份(如下图所示)
由于我不确定如何将其编码为 select 正确的月份,因此我尝试通过 select 仅记录“2020 年 8 月”来记录宏以供参考。下面是记录的代码:
ActiveSheet.PivotTables("PivotTable1").PivotFields("[Time].[Time].[Year]"). _
VisibleItemsList = Array("")
ActiveSheet.PivotTables("PivotTable1").PivotFields("[Time].[Time].[Quarter]"). _
VisibleItemsList = Array("")
ActiveSheet.PivotTables("PivotTable1").PivotFields("[Time].[Time].[Month]"). _
VisibleItemsList = Array("[Time].[Time].[Month].&[2020 AUG]")
我想我可以创建一个变量(下面的 ExactDate
),以便 selection 标准基于 InputBox 中的条目(例如 202008 --> 转换为“2020 AUG” , 依此类推)
'Select the relevant month and year on the pivot table
ExactDate = yr + " " + longmth
With ActiveSheet.PivotTables("PivotTable1")
.PivotFields("[Time].[Time].[Year]").VisibleItemsList = Array("")
.PivotFields("[Time].[Time].[Quarter]").VisibleItemsList = Array("")
.PivotFields("[Time].[Time].[Month]").VisibleItemsList = Array("[Time].[Time].[Month].&[ExactDate]")
它抛出
"Run-time error '1004':
The item could not be found in the OLAP Cube."
在调试中,这段代码高亮显示
.PivotFields("[Time].[Time].[Month]").VisibleItemsList = Array("[Time].[Time].[Month].&[ExactDate]")
我用硬代码替换了变量ExactDate
(任何年份和月份,如下所示):
.PivotFields("[Time].[Time].[Month]").VisibleItemsList = Array("[Time].[Time].[Month].&[2019 SEP]")
而且有效。
正文相同;唯一的区别是固定值与分配变量。
为了回答为什么需要双引号和符号的问题,这里是我的完整答案:
在 VBA 中,您使用 Dim
语句声明变量(至少是推荐的方式)。
因此,在您的情况下,此行应该作为 良好做法:
Dim ExactDate as String
然后,文字字符串应该用双引号括起来。
在你的情况下,像这样:
"[Time].[Time].[Month].&["
为了连接两个字符串或一个字符串和一个变量,您可以使用符号 &
因此,完成代码中的示例后,要过滤 VisibleItemsList
的字符串将是:
Array("[Time].[Time].[Month].&[" & ExactDate & "]"
由于 ExactDate
表示一个字符串,因此连接将起作用。
希望解释清楚。