繁体   English   中英

按名称引用工作表返回“下标超出范围”错误

[英]Referencing sheet by name returns "subscript out of range" error

设置:

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

我运行这段代码。

Sub RunMacro()
    Run "'E:\programs(x86)\Dropbox\work\excel\data.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. “什么是‘B1’?”

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

  1. 是的
  2. 是的
  3. daysBack 变量应该是 0 到 365 之间的数字; “从数据库中检索数据时,我想返回多少天?”。 (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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM