【发布时间】:2020-01-11 01:29:00
【问题描述】:
我使用的是 Excel 2013。我可以通过遍历工作表并检查 Name 属性来访问工作表,但我无法通过使用工作表名称作为键单独找到它。
我真的必须遍历所有工作表,然后遍历所有数据透视表才能找到我需要刷新的那个吗?
这行得通:
Dim oWorksheet As Worksheet
Dim oPivot As PivotTable
For Each oWorksheet In ActiveWorkbook.Worksheets
If oWorksheet.Name = "FPSpivot" Then
For Each oPivot In oWorksheet.PivotTables
oPivot.PivotCache.Refresh
Next oPivot
End If
Next oWorksheet
这不起作用:
Dim oWorksheet As Worksheet
oWorksheet = ActiveWorkbook.Worksheets("FPSpivot")
我得到了老栗子:
对象变量或未设置块变量。
为什么?
理想情况下,我只想要一行:
ActiveWorkbook.Worksheets("FPSpivot").PivotTables("FPSpivot").PivotCache.Refresh
这一定是可能的吗?
【问题讨论】:
-
您确定您的意思是
ActiveWorkbook(具有焦点/在顶部的工作簿)还是您的意思是ThisWorkbook(编写代码的工作簿)?有很大的不同,在大多数情况下你需要ThisWorkbook。 • 另请注意,您需要将Set用于将工作表放入变量等对象,请使用Set oWorksheet = ActiveWorkbook.Worksheets("FPSpivot") -
使用
activeworkbook、activesheet和.selectis generally considered bad practise. 因为它会引发 @Pᴇʜ 指出的错误。 -
我仍然不清楚为什么
ActiveWorkbook.Worksheets("FPSpivot").PivotTables("FPSpivot").PivotCache.Refresh不起作用。它抱怨“无法获取 Worksheet 类的数据透视表属性”。 -
@MarkRoworth 这意味着您的数据透视表未命名为“FPSpivot”。
标签: excel vba pivot-table excel-2013 worksheet