如何修复 vba 错误 9(索引超出范围)?
索引超出范围(运行时:错误 9)
当您引用对象或尝试在代码中使用代码中不存在的变量时,会出现下标超出范围(运行时:错误 9)错误,在这种情况下,VBA 将显示此错误。由于您编写的每个代码都是唯一的,因此错误的原因将是。
在以下示例中,您尝试激活“Sheet1”,它是一个对象。但正如您在工作簿中看到的那样,不存在名为“Sheet1”的工作表(而是“Sheet2”),因此 VBA 显示“下标超出范围”以通知您代码有问题。
索引超出范围
还有另一种情况,当您尝试声明动态数组但忘记使用 DIM 和 ReDim 语句重新定义数组的长度时,您必须面对“下标超出范围错误”错误。
现在,在上面的代码中,您有一个名为“myArray”的数组,为了使其动态,我们最初将数组的长度留空。但在添加元素之前,需要使用 ReDim 语句重新定义数组的长度。
这就是我们在上面的代码中犯的错误,VBA 返回了“Script out of range”错误。
Sub myMacro() Dim myArray() As Variant myArray(1) = "One" End Sub
如何修复Excel中索引超出范围的问题?
处理这种超出范围的索引的最佳方法是编写高效的代码,并确保调试您编写的代码(一步一步)。
当您逐步运行代码时,您很容易知道该代码的哪一行有错误,因为 VBA 会向您显示错误 9 的错误消息,并以黄色突出显示该行。
您可以做的另一件事是使用“错误处理程序”在发生错误时跳转到特定的错误行。
在下面的代码中,我们编写了一行来激活工作表,但在此之前,我们使用 goto 语句传递给错误处理程序。在错误处理程序中,您有一个消息框,其中显示一条带有 Err 的消息。发生错误的说明。
因此,当您运行此代码并且“Sheet1”不在您尝试激活它的工作簿中时。它会向您显示一个如下所示的消息框。
如果“Sheet1”存在,则根本不会有任何消息。
Sub myMacro() Dim wks As Worksheet On Error GoTo myError Sheets("Sheet1").Activate myError: MsgBox "There's an error in the code: " & Err.Description & _ ". That means there's some problem with the sheet " & _ "that you want to activate" End Sub