最近,我受命建立一个解决方案,使我和我的队友能够快速处理我们所说的“食谱”。不幸的是,无法使用任何其他语言(如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找到它。
答案 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