VBA下标超出范围(运行时错误“ 9”)|为什么会发生此错误?

Excel VBA下标超出范围

下标超出范围是当我们尝试引用代码中不存在的某些内容或变量时在VBA中遇到的错误,例如,让我们假设我们没有名为x的变量,但我们在x上使用msgbox函数会遇到下标超出范围的错误。

发生VBA下标超出范围错误,因为我们尝试访问的对象不存在。这是VBA编码中的错误类型,这是“运行时错误9”。重要的是要理解编写高效代码的概念,而更重要的是要了解VBA代码的错误以有效地调试代码。

如果您的编码错误,但您不知道那是什么错误,那是当您离开时。

在不知道疾病是什么的情况下,医生无法给患者服药。可以肯定的是,医生和患者都知道存在某种疾病(错误),但是了解该疾病(错误)比对其进行药物治疗很重要。如果您可以完美地理解错误,那么找到解决方案就容易得多。

在本文的类似注释上,我们将看到我们通常会遇到规律性的重要错误之一,即Excel VBA中的“下标超出范围”错误。

什么是Excel VBA中的下标超出范围错误?

例如,如果您指的是没有工作表的工作表,那么我们得到 运行时错误9:“下标超出范围”。

如果单击“结束”按钮,它将结束子过程;如果单击“调试”,它将带您到遇到错误的代码行,并且帮助将您带到Microsoft网站页面。

为什么出现下标超出范围错误?

正如我作为医生所说,重要的是要在考虑药物之前找到死者。代码行未读取我们输入的对象时,会发生VBA下标超出范围错误。

作为示例,请看下面的图像,我有三个工作表分别命名为Sheet1,Sheet2,Sheet3。

现在,在代码中,我编写了代码以选择工作表“ Sales”。

代码:

 Sub Macro2()Sheets(“ Sales”)。Select End Sub 

如果我使用F5键或手动运行此代码,最终将获得 运行时错误9:“下标超出范围”。

这是因为我尝试访问工作簿中不存在的工作表对象“ Sales”。这是一个运行时错误,因为在运行代码时发生了此错误。

我们遇到的另一个常见下标错误是,当我们引用不存在的工作簿时。例如,请看下面的代码。

代码:

 Sub Macro1()Dim Wb作为工作簿集Wb = Workbooks(“ Salary Sheet.xlsx”)End Sub 

上面的代码说变量WB应该等于工作簿“ Salary Sheet.xlsx”。到目前为止,此工作簿尚未在我的计算机上打开。如果我手动或通过F5键运行此代码,我将获得 运行时错误9:“下标超出范围”。

这是由于我指的是工作簿,该工作簿要么目前尚未打开,要么根本不存在。

阵列中的VBA下标错误

当您将数组声明为动态数组时,如果未在VBA中使用单词DIM或REDIM来定义数组的长度,我们通常会得到VBA下标超出范围错误。例如,看下面的代码。

代码:

 Sub Macro3()Dim MyArray()如MyArray(1)= 25 End Sub 

在上面,我已经将变量声明为数组,但是我没有分配起点和终点,而是直接为第一个数组分配了25的值。

如果我使用F5键或手动运行此代码,我们将获得 运行时错误9:“下标超出范围”。

要解决此问题,我需要使用Redim字分配数组的长度。

代码:

 Sub Macro3()Dim MyArray()作为长ReDim MyArray(1至5)MyArray(1)= 25 End Sub 

这段代码没有给出任何错误。

如何在VBA代码末尾显示错误?

如果您不希望在代码启动并运行时看到错误,但是在末尾需要一个错误列表,则需要使用“错误恢复时”错误处理程序。看下面的代码。

代码:

 Sub Macro1()Dim Wb作为错误恢复工作簿上的工作簿下一步设置Wb = Workbooks(“ Salary Sheet.xlsx”)MsgBox错误说明结束Sub Sub 

如我们所见,此代码将抛出 运行时错误9:“下标超出范围 在Excel VBA中. 但是我必须在运行VBA时在VBA中使用错误处理程序On Error Resume Next,我们不会收到任何错误消息,但是在最后的消息框中显示了这样的错误描述。

您可以在此处下载Excel VBA下标超出范围模板:-VBA下标超出范围模板