【问题标题】:Why cannot I not access a worksheet by name?为什么我不能按名称访问工作表?
【发布时间】: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")
  • 使用 activeworkbookactivesheet.select is generally considered bad practise. 因为它会引发 @Pᴇʜ 指出的错误。
  • 我仍然不清楚为什么ActiveWorkbook.Worksheets("FPSpivot").PivotTables("FPSpivot").PivotCache.Refresh 不起作用。它抱怨“无法获取 Worksheet 类的数据透视表属性”。
  • @MarkRoworth 这意味着您的数据透视表未命名为“FPSpivot”。

标签: excel vba pivot-table excel-2013 worksheet


【解决方案1】:

错误

对象变量或With块变量未设置。

发生是因为如果您使用对象需要使用Set

Dim oWorksheet As Worksheet
Set oWorksheet = ActiveWorkbook.Worksheets("FPSpivot")

另外:
你确定你的意思是ActiveWorkbook(具有焦点/在顶部的工作簿)还是你的意思是ThisWorkbook(编写代码的工作簿)?有很大的不同,在大多数情况下你需要ThisWorkbook

【讨论】:

  • 啊,谢谢。首先,是的,我的意思是 ThisWorkbook。其次,我使用 .Net 太多了,我忘了你需要一个 VBA 中的 Set。奇怪的是,有时你看不到树木的树木。谢谢您的帮助。准点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-14
  • 1970-01-01
  • 1970-01-01
  • 2011-12-14
  • 2015-07-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多