I need to copy data from a pivot table in an Excel file, which links to an external data source. The difficulty is to select the period in the pivot field.
The macro should start with an InputBox for the user to input the date, so that the macro can select the month for further handling.
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"
The name of the PivotField is "Year". This filter is for selecting the year, which breaks down into quarters, which then break down into months (as you can see in the pic below)

As I was not sure how to code this to select the correct month, I tried to record the Macro by selecting only "2020 AUG" for reference. Below is the code recorded:
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]")
I thought I could make a variable (ExactDate below) so that the selection criterion is based on the entry in the InputBox (e.g. 202008 --> Convert to "2020 AUG", and so on)
'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]")
It throws
"Run-time error '1004':
The item could not be found in the OLAP Cube."
In the Debug, this code is highlighted
.PivotFields("[Time].[Time].[Month]").VisibleItemsList = Array("[Time].[Time].[Month].&[ExactDate]")
I replaced the variable ExactDate with hard code (any year and month such as the following):
.PivotFields("[Time].[Time].[Month]").VisibleItemsList = Array("[Time].[Time].[Month].&[2019 SEP]")
And it works.
The text is the same; the only difference is fixed value vs assigning a variable.
Array("[Time].[Time].[Month].&[" & ExactDate & "]")- Ricardo Diaz