我的VBA代码中的所有引用都是正确的,但我仍然得到超出范围的"下标"错误?

时间:2017-07-13 20:46:35

标签: excel vba excel-vba

我偶然发现了一个错误,我似乎无法在互联网上潜伏数小时后解决类似的错误,我已经找到了十几个错误,但他们并没有错过#39 ; t似乎适合这种情况。

设置非常简单。我有:

  1. 从数据库导入数据的Excel工作簿(VBA - SQL)
  2. 我希望运行" UpdateAll"的Excel工作簿来自第一个Excel工作簿的宏并获取一些更新的数据,这应该是相当简单的
  3. 然而,当我运行这个简单的代码时,这就变得棘手了。

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

    由于错误"下标超出范围(错误9)"是唯一返回的东西,我随后按下#34; Debug"按钮,它导致我错误,据说

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

    常见问题如下:

    1. &#34;你真的有一张名为&#34;更新&#34;&#34;
    2. 的表格
    3. &#34;你知道它区分大小写吗?&#34;
    4. &#34;您将什么用于&#34;
    5. 的daysBack变量
    6. &#34;什么是&#34; B1&#34;?&#34;
    7. 我对所有这些问题的回答:

      1. daysBack变量应该是0到365之间的数字,如同; &#34;从数据库中检索数据时我想回去多少天?&#34;。 (0 ==仅限今天)
      2. B1单元格中的默认值为0.
      3. 现在这是我的问题:

        第二行应该是什么才能从B1单元格中获取单个值?

2 个答案:

答案 0 :(得分:4)

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

Sheets("Update")

隐含地:

ActiveWorkbook.Sheets("Update")

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

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

答案 1 :(得分:1)

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

  

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

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

在我的情况下会是:

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