You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关闭VBA用户窗体时出现「下标越界」错误的排查求助

VBA用户窗体关闭时「下标越界」错误排查建议

我是VBA新手,制作的用户窗体输入、列表框等功能均正常,修改内容也能保存到工作表,但关闭窗体时会弹出「Subscript out of range(下标越界)」错误提示,且无法进入调试模式定位错误行,相关代码如下:

Private Sub Save_Click()

'Save Current Lists

Sheets("Lists").Select
Range("A1:B20").Select
Selection.Copy
Range("A30").Select
ActiveSheet.Paste
Range("H1:I26").Select
Application.CutCopyMode = False
Selection.Copy
Range("H30").Select
ActiveSheet.Paste
Sheets("Add Data").Select
Range("A1").Select

' Save adjusted shift lists to sheet

Sheets("Lists").Range("A3:B30").ClearContents

Dim cntEntriesA As Long
Dim cntEntriesB As Long
cntEntriesA = AShift1.ListCount
cntEntriesB = BShift1.ListCount

Sheets("Lists").Range("A3").Resize(cntEntriesA).Value = AShift1.List
Sheets("Lists").Range("B3").Resize(cntEntriesB).Value = BShift1.List

' Save adjusted distribution list to sheet

Sheets("Lists").Range("H2").Value = LN1.Value
Sheets("Lists").Range("I2").Value = E1.Value
Sheets("Lists").Range("H3").Value = LN2.Value
Sheets("Lists").Range("I3").Value = E2.Value
Sheets("Lists").Range("H4").Value = LN3.Value
Sheets("Lists").Range("I4").Value = E3.Value
Sheets("Lists").Range("H5").Value = LN4.Value
Sheets("Lists").Range("I5").Value = E4.Value
Sheets("Lists").Range("H6").Value = LN5.Value
Sheets("Lists").Range("I6").Value = E5.Value
Sheets("Lists").Range("H7").Value = LN6.Value
Sheets("Lists").Range("I7").Value = E6.Value
Sheets("Lists").Range("H8").Value = LN7.Value
Sheets("Lists").Range("I8").Value = E7.Value
Sheets("Lists").Range("H9").Value = LN8.Value
Sheets("Lists").Range("I9").Value = E8.Value
Sheets("Lists").Range("H10").Value = LN9.Value
Sheets("Lists").Range("I10").Value = E9.Value
Sheets("Lists").Range("H11").Value = LN10.Value
Sheets("Lists").Range("I11").Value = E10.Value
Sheets("Lists").Range("H12").Value = LN11.Value
Sheets("Lists").Range("I12").Value = E11.Value
Sheets("Lists").Range("H13").Value = LN12.Value
Sheets("Lists").Range("I13").Value = E12.Value
Sheets("Lists").Range("H14").Value = LN13.Value
Sheets("Lists").Range("I14").Value = E13.Value
Sheets("Lists").Range("H15").Value = LN14.Value
Sheets("Lists").Range("I15").Value = E14.Value
Sheets("Lists").Range("H16").Value = LN15.Value
Sheets("Lists").Range("I16").Value = E15.Value
Sheets("Lists").Range("H17").Value = LN16.Value
Sheets("Lists").Range("I17").Value = E16.Value
Sheets("Lists").Range("H18").Value = LN17.Value
Sheets("Lists").Range("I18").Value = E17.Value
Sheets("Lists").Range("H19").Value = LN18.Value
Sheets("Lists").Range("I19").Value = E18.Value
Sheets("Lists").Range("H20").Value = LN19.Value
Sheets("Lists").Range("I20").Value = E19.Value
Sheets("Lists").Range("H21").Value = LN20.Value
Sheets("Lists").Range("I21").Value = E20.Value
Sheets("Lists").Range("H22").Value = LN21.Value
Sheets("Lists").Range("I22").Value = E21.Value
Sheets("Lists").Range("H23").Value = LN22.Value
Sheets("Lists").Range("I23").Value = E22.Value
Sheets("Lists").Range("H24").Value = LN23.Value
Sheets("Lists").Range("I24").Value = E23.Value
Sheets("Lists").Range("H25").Value = LN24.Value
Sheets("Lists").Range("I25").Value = E24.Value
Sheets("Lists").Range("H26").Value = LN25.Value
Sheets("Lists").Range("I26").Value = E25.Value

Unload Me

End Sub

排查建议

  • 核对工作表名称:确认工作簿中存在Lists和Add Data这两个工作表,名称完全匹配(注意大小写、空格,不能有拼写错误)。
  • 处理列表框空值情况:当AShift1或BShift1列表框没有条目时,ListCount为0,Resize(0)赋值会触发下标越界,添加判断逻辑:
    If cntEntriesA > 0 Then
        Sheets("Lists").Range("A3").Resize(cntEntriesA).Value = AShift1.List
    End If
    If cntEntriesB > 0 Then
        Sheets("Lists").Range("B3").Resize(cntEntriesB).Value = BShift1.List
    End If
    
  • 检查窗体关闭相关事件:用户窗体关闭时可能触发UserForm_Terminate或UserForm_QueryClose事件,查看这些事件中的代码是否存在下标越界问题。
  • 替换Select/Activate操作:代码中大量使用Select和Activate容易引发意外错误,改用直接引用对象的方式,比如:
    With Sheets("Lists")
        .Range("A1:B20").Copy .Range("A30")
        .Range("H1:I26").Copy .Range("H30")
        .Range("A3:B30").ClearContents
        ' 后续相关操作都放在With块内
    End With
    
  • 添加错误捕获定位:在代码开头加入错误捕获,强制进入调试模式定位错误:
    Private Sub Save_Click()
        On Error GoTo ErrHandler
        ' 原有代码...
    ErrHandler:
        MsgBox "错误行号:" & Erl & vbCrLf & "错误描述:" & Err.Description
        Stop ' 触发调试模式
    End Sub
    

内容的提问来源于stack exchange,提问作者Artybunny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 03:07:05