【问题标题】:Error VBA 9 Subscript out of range错误 VBA 9 下标超出范围
【发布时间】:2017-06-16 17:52:51
【问题描述】:

我有一个带有 3 个选项卡的 Excel 工作簿。

第二个选项卡 (Sheet2) 包含来自 Oracle DB 的数据。

我在 Sheet3 中使用来自 Sheet2 的数据创建了一个数据透视表。

我希望数据透视表在数据更改时自动更新。

代码如下:

Private Sub Worksheet_Change(ByVal Target As Range)
Worksheets("Sheet3").PivotTables("PivotTable4").PivotCache.Refresh  
End Sub

PivotTable4 是数据透视表的名称。

几分钟后我得到了错误:

运行时错误“9”:下标超出范围。

【问题讨论】:

  • 这是您正在运行的唯一宏代码,还是还有更多?是成功运行几分钟后报错,还是单次运行几分钟失败?
  • 我注意到当我为 2 个不同的 excel 运行 2 个宏代码时出现此错误。
  • 当我删除一个宏代码时,另一个宏工作。
  • 听起来像Sheet3 和/或PivotTable4 只存在于您的一个工作簿中,并且您的代码试图在它们不存在的上下文中使用这些名称。尝试在对PivotCache.Refresh 的调用中指定工作簿。或者,该问题与您发布的代码无关,而是由另一个工作簿中的另一个宏引起的。
  • 这 2 个工作簿来自 power point 的 2 个不同图表。如何在代码中指定工作簿?

标签: vba excel


【解决方案1】:

使用多个工作簿时,如果您的代码在一个工作簿中查找具有特定名称的对象,而实际上它在另一个工作簿中,您将收到“下标超出范围”错误。因此,如果您要打开多个工作簿,最好限定要在其中执行代码的工作簿,例如:

Workbooks("MyWorkbook").Worksheets("Sheet3").PivotTables("Pi‌​votTable4").PivotCac‌​he.Refresh

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-08
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    • 2015-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多