按名称引用工作表将返回错误"subscript out of range"



设置:

  1. 从数据库导入数据的 Excel 工作簿 (VBA - SQL)
  2. 我想从第一个Excel工作簿运行"UpdateAll"宏并获取一些更新数据的Excel工作簿

我运行此代码。

Sub RunMacro()
Run "'E:programs(x86)Dropboxworkexceldata.xlsm'!UpdateAll"
End Sub

返回的错误:

下标超出范围(错误 9)

"调试"导致:

Sub UpdateAll()
daysBack = Sheets("Update").Range("B1").Value  '<--- Called out as the error
Call getDatabase11DATA
Call correctData
End Sub

常见问题:

">
  1. 你真的有一张叫"更新"的表吗?">
  2. "你知道它区分大小写吗?">
  3. "你用 daysBack 变量做什么">
  4. ">
  5. 什么是"B1"?">

我对所有这些问题的回答:

  1. 是的
  2. 是的
  3. daysBack 变量应该是 0 到 365 之间的数字,如 in;"从数据库中检索数据时,我想返回多少天?(0 == 仅限今天)
  4. B1 单元格中的默认值为 0。

活动工作簿中没有Update工作表。这:

Sheets("Update")

隐式是:

ActiveWorkbook.Sheets("Update")

1)ActiveWorkbook不是您期望的书,或者 2) 工作表名称拼写错误;查找(和删除)前导空格或尾随空格。

请注意,Sheets集合还可以包含图表;如果要查找工作表,请使用Worksheets集合。

将解决方案从问题移动到答案:

编辑:

解决方案是将第二代码中的第二行编辑为这种格式:

daysBack = Workbooks("name_of_workbook_containing_update_sheet").Sheets‌​("Update").Range("B1‌​").Value

就我而言,这将是:

daysBack = Workbooks("data").Sheets‌​("Update").Range("B1‌​").Value

最新更新