运行时错误\'9\':下标超出范围-仅在关闭Excel VBE时

问题描述

| 所有, 我在Excel宏中遇到一些VBA代码错误。这是我正在尝试的工作流程: 我有一个模块,该模块运行代码来创建新的工作表,对其进行格式化并添加一堆值 在同一模块中,我根据填充的最后一行来确定单元格的范围(根据之前的步骤,该行将始终是不同的) 知道此范围后,我将使用下面的代码写入新创建的工作表代码模块,以便设置“ change_event”。我只希望change_event在刚确定的范围内的值发生更改时触发:
Dim Startline As Long
Startline = 1
Dim x As Integer
x = Errors.Count - 1

Dim rng As Range
Set rng = Range(\"D\" & LastRow - x & \":\" & \"D\" & LastRow)

       With ThisWorkbook.VBProject.VBComponents(VRS.CodeName).CodeModule
        Startline = .CreateEventProc(\"Change\",\"Worksheet\") + 1
        .InsertLines Startline,\"Dim rng As Range \"
        Startline = Startline + 1
        .InsertLines Startline,\"Set rng = Range(\" & \"\"\"\" & CStr(rng.Address) & \"\"\"\" & \")\"
        Startline = Startline + 1
        .InsertLines Startline,\"If Target.Count > 1 Then Exit Sub\"
        Startline = Startline + 1
        .InsertLines Startline,\"If Intersect(Target,rng) Is Nothing Then Exit Sub\"
        Startline = Startline + 1
        .InsertLines Startline,\"MsgBox (\"\"Value Changed!...\"\") \"
       End With
该代码有效,并将以下内容写入指定工作表的代码模块中:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
Set rng = Range(\"D58:D62\")
If Target.Count > 1 Then Exit Sub  
If Intersect(Target,rng) Is Nothing Then Exit Sub
MsgBox (\"Value Changed!...\") 
End Sub`
此代码也可以使用,并且更改范围中的单元格时会出现消息框。但是,关闭VBE会产生错误:
Run-time error \'9\': Subscript out of range
击中调试将我带到了这一行:
With ThisWorkbook.VBProject.VBComponents(WS.CodeName).CodeModule
但是它实际上在以下行上引发了错误:
Startline = .CreateEventProc(\"Change\",\"Worksheet\") + 1
    

解决方法

我不确定为什么会收到该错误,但是这是另一种避免此错误的方法
Sub Main()

    Dim ws As Worksheet
    Dim rng As Range
    Dim sCode As String

    Set ws = ThisWorkbook.Worksheets.Add
    Set rng = ws.Range(\"D1:D10\")

    sCode = \"Private Sub Worksheet_Change(ByVal Target As Range)\" & vbNewLine & vbNewLine
    sCode = sCode & vbTab & \"Dim rng As Range\" & vbNewLine & vbNewLine
    sCode = sCode & vbTab & \"Set rng = Me.Range(\" & \"\"\"\" & rng.Address & \"\"\"\" & \")\" & vbNewLine & vbNewLine
    sCode = sCode & vbTab & \"If Target.Count > 1 Then Exit Sub\" & vbNewLine
    sCode = sCode & vbTab & \"If Intersect(Target,rng) Is Nothing Then Exit Sub\" & vbNewLine & vbNewLine
    sCode = sCode & vbTab & \"MsgBox (\"\"Value Changed!...\"\") \" & vbNewLine
    sCode = sCode & \"End Sub\"

    ThisWorkbook.VBProject.VBComponents(ws.CodeName).CodeModule.AddFromString sCode

End Sub
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...