VBA MsgBox导致错误

时间:2016-01-12 16:15:11

标签: vba excel-vba excel

在我的VBA项目中,我偶尔会弹出一个MsgBox来通知用户已完成的事情'或者'更新了'子程序运行后。 没有MsgBox似乎运行正常,但插入一个似乎给我一个错误。 不确定是否有必要在这里显示整个代码,因为它非常大但在子程序结束时我只是想...

MsgBox ("Completed")

后面是End Sub

然而,当我运行它然后单击Msgbox上的OK时,我得到一个运行时错误,在单击DeBug时,它会突出显示End Sub。

有没有理由说这会引起这样的错误? 我错过了什么吗? 非常感谢

这里的一些代码

'Add unique data to new location
For i = 1 To UnqArray1.Count
 rCell(i, 1) = UnqArray1(i)
Next

'Move Split Array into a new array
Set rTable2 = rCell
rng2() = rTable2.Value

'Filter into unique items
On Error Resume Next
For Each b In rng2
UnqArray2.Add b, b
Next

'Clear location
rCell.Clear

'Add new array to location
For i = 1 To UnqArray2.Count
rCell(i, 1) = UnqArray2(i)
Next

'Find the end of the category list
lastrow = Worksheets("CatMatch").Range("Q100000").End(xlUp).Row

'Sort alphabetically
Worksheets("CatMatch").Range("Q1:Q" & lastrow).Sort key1:=Range("Q1"), order1:=xlAscending, Header:=xlNo

'Copy it to CatMatch
Worksheets("CatMatch").Range("Q1:Q" & lastrow).Copy Destination:=Worksheets("CatMatch").Range("B15")

MsgBox "Completed"

End Sub

1 个答案:

答案 0 :(得分:3)

我无法重现您的错误,但如果没有MsgBox,它几​​乎肯定是错误的。问题是代码的问题被片段中的On Error Resume Next隐藏了:

'Filter into unique items
On Error Resume Next
For Each b In rng2
UnqArray2.Add b, b
Next

两条评论:

1)为什么不使用RemoveDuplicates方法,如果这是你想要做的?

2)如果您尝试添加重复密钥,则代码正在使用集合引发错误的事实。此 是对On Error Resume Next的有效使用 - 但仅当您在完成向集合添加密钥时将其关闭。类似的东西:

On Error Resume Next
    For Each b In rng2
        UnqArray2.Add b, b
    Next
On Error GoTo 0

进入的一个好习惯是将On Error Resume NextOn Error GoTo 0视为定义代码块,甚至可能像我上面那样缩进块内的代码。更好的习惯是不要假设只发生一种类型的错误。上面的代码预计会出现错误457(这是与尝试添加重复密钥相对应的错误编号 - 您需要搜索文档才能找到它,或者只是在没有错误处理的情况下运行代码并查看它是如何崩溃的。其他任何事情都表明存在其他问题。为了最大限度地保护您,您可以执行以下操作:

On Error Resume Next
    For Each b In rng2
        UnqArray2.Add b, b
        If Err.Number > 0 And Err.Number <> 457 Then
            MsgBox "Unhandled error: " & Err.Number
            Exit Sub
        End If
    Next
On Error GoTo 0

这样做不会解决您的问题,但应该让您的实际问题更加明显。