关闭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
相关产品推荐
相关产品推荐

