我使用For ... Next循环来更改数据透视表中的PageField名称。然后,运行一些处理。当我明确说明数组项目时,我可以让它做我想做的事情(下面注释掉的尝试)。
我宁愿只选择一个范围(因为工作簿中其他位置已存在的项目,在另一个工作表上),然后运行宏。
我认为For循环中有一些不必要的行,并且我没有正确地定义数组。我已经被困在这个问题上太久了。谢谢你的帮助。非常感谢。
我已将整个sub
包括在内,只是为了确定,尽管可能不需要。
Sub CyclePages()
'Disables screen refreshing.
Application.ScreenUpdating = False
ActiveWorkbook.RefreshAll
Sheets("Sheet1").Activate
Sheets("Sheet1").Range("A:Z").Select
Selection.ClearContents
Sheets("Sheet2").Activate 'SETTING SHEET TO WHERE THE USER DEFINED ARRAY IS.
Dim arrSht As Variant, i
'arrSht = Array("Data1", "Data2") 'THIS WORKS.
arrSht = Array(Selection.Value) 'THIS DOES NOT WORK. IT ONLY RUNS THE FIRST ITEM.
For i = LBound(arrSht) To UBound(arrSht)
With Sheets("Sheet3").PivotTables("PivotTable1").PivotFields("Name1").CurrentPage = _
("All")
Sheets("Sheet3").Activate
Sheets("Sheet3").PivotTables("PivotTable1").PivotFields("Name1").CurrentPage = _
(arrSht(i))
ActiveWorkbook.RefreshAll
DoEvents
Sheets("Sheet1").Activate
ActiveSheet.Range("A5000").End(xlUp).Offset(1, 0).Select
ActiveCell = arrSht(i)
Report_Process 'Running extra processing.
End With
Next i
'ReEnables screen refreshing.
Application.ScreenUpdating = True
End Sub
答案 0 :(得分:2)
要将工作表值传输到变量,请尝试...
arrSht = Selection.Value
请注意,将工作表值传输到变量会创建一个二维数组。例如,假设您选择A1:A10,arrSht将是一个10行乘1列的数组。所以你需要访问这样的项目......
For i = LBound(arrSht) To UBound(arrSht)
Debug.Print arrSht(i, 1)
Next
但是,假设您选择A1:J1,arrSht将是1行乘10列数组。所以你需要访问这样的项目......
For i = LBound(arrSht, 2) To UBound(arrSht, 2)
Debug.Print arrSht(1, i)
Next