所有的引用在我的VBA代码是正确的,但我仍然得到一个“下标超出范围”的错误?

我偶然发现了一个错误,这个错误在隐藏在互联网上几个小时后似乎无法解决,我发现了一些类似的错误,但似乎并不适合这种情况。

设置很简单。 我有:

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

然而,当我运行这个简单的代码时,这就是棘手的问题。

1. Sub RunMacro() 2. Run "'E:\programs(x86)\Dropbox\work\excel\data.xlsm'!UpdateAll" 3. End Sub 

由于错误“下标超出范围(错误9)”是唯一返回的,我随后按“debugging”button,这导致我的错误, 据说

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

现在你们会说; “你真的有一张名为”更新“的工作表,”你知道它是区分大小写吗?“,你用什么”daysBack“variables为”和“什么是”B1“?

我的答案是:是的,是的 –

daysBackvariables应该是一个介于0到365之间的数字; “从数据库中检索数据时,我想返回多less天?”。 (0 ==今天只)

B1单元格中的默认值是0。


现在这是我的一个问题:

你能不能在第二个代码中写第二行来简单地从单元中获取一个值?

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

 Sheets("Update") 

含蓄地说:

 ActiveWorkbook.Sheets("Update") 

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

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

从问题移动解决scheme:

编辑:解决scheme是编辑第二行代码中的第二行到这种格式:

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

在我的情况下是:

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