用于处理错误的行始终称为

时间:2019-01-18 13:29:30

标签: excel vba

项目中有一些上下文(如果您不在乎,请跳过此内容)

最近,我受命建立一个解决方案,使我和我的队友能够快速处理我们所说的“食谱”。不幸的是,无法使用任何其他语言(如Python),因为除非在特定程序中打开所有文件,否则所有文件都会被加密。 Excel是其中之一,因此,我们的整个办公室都倾向于将VBA用于所有内容。 VBA来自我曾经使用过的几乎所有语言,它... ...可怕的是(只是一种见解)开发复杂的项目,所以我冒险通过建立一个图书馆来简化我(和我的同事)的生活各种类型,功能,类等。

问题

由于某些原因,以下代码将始终执行alreadyExists Line,而不是仅在引发Error时执行:

Private Sub SetName(index As Integer, name As String)
    On Error GoTo alreadyExists

    If (Not NameExists(name)) Then
        internalName(index) = name
    Else
        Err.Raise 515, "SetName", "Name exists"
    End If

alreadyExists:
    MsgBox ("Name already exists in array.")
    End
End Sub

其他Subs可以很好地处理此模式,但是这个Sub继续运行alreadyExists错误。称为Sub的是:

Public Sub Insert(data As Variant, Optional name As String)
    Dim i As Integer
    If (Not internalData) = -1 Then
        i = 0
    Else
        i = UBound(internalData) + 1
    End If
    Call ResizeTo(i)

    If name = "" Then
        internalName(i) = i
    Else
        SetName i, name
    End If

    internalData(i) = data
End Sub

如果您觉得所有代码都是必需的,则可以here找到它。

1 个答案:

答案 0 :(得分:1)

我曾经遇到过这种错误,您必须在错误处理程序之前放置Exit Sub,否则它将像代码的其他任何部分一样被读取。

Private Sub SetName(index As Integer, name As String)
    On Error GoTo alreadyExists

    If (Not NameExists(name)) Then
        internalName(index) = name
    Else
        Err.Raise 515, "SetName", "Name exists"
    End If

Exit Sub 

alreadyExists:
    MsgBox ("Name already exists in array.")
    End
End Sub