0

项目的一些背景(如果你不关心,请跳过这个)

最近,我的任务是构建一个解决方案,让我和我的队友能够快速处理我们所谓的“食谱”。不幸的是,不能使用任何其他语言,如 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

如果您觉得所有代码都是必要的,那么您可以在这里找到它。

4

1 回答 1

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
于 2019-01-18T13:33:29.467 回答