当我从if
语句中的另一个函数调用函数时,我遇到了一个奇怪的问题。我定义了一个Sub
,我用它来测试这个函数,它调用一个函数,它依赖于我用来比较值的另一个函数。代码如下,这应该清楚。基本上,我不明白代码如何在print
语句中正常工作,然后在GetMatch
函数中抛出错误。我感谢任何帮助。
编辑:突然间一切正常。调试断点会影响程序吗?我没有改变任何东西,但在调用GetMatch时不再需要CStr()。我还没有触及任何潜艇或功能,但我确实清除了一些断点。如果我找到了导致它的原因,我会发布一个解决方案。感谢大家的帮助。
Edit2:也许这是VBA的错误?如果我将CStr()选项添加到indexOrder(...)调用,那么事情就可以了。以前,没有CStr()选项,事情就不起作用了。现在,奇怪的是,在使用CStr()之后,我能够完全从程序中删除CStr(),并且事情再次起作用。如果我撤消到他们原本不在那里的地方,它就会破裂。我不知道这可能是什么,但如果有人有解释,我很感兴趣。感谢
Sub testFind()
Dim SortOrder() As Variant
Dim indexOrder() As Variant
SortOrder = Array("Contact Email", "Last Name", "First Name", "Attempt #", "Customization", "Template #")
indexOrder = Array("First Name", "First Name", "Template #", "Customization")
findAndReplace(indexOrder, SortOrder)
End Sub
Function findAndReplace(indexOrder As Variant, list As Variant) As Variant
Dim indexLength As Integer
Dim listLength As Integer
Debug.Print TypeName(indexOrder(0)) ' Identifies as String
indexLength = getVariantLength(indexOrder)
listLength = getVariantLength(list)
Debug.Print GetMatch(CStr(indexOrder(1)), CStr(indexOrder(1))) ' This works fine. Returns 0 as it should
If GetMatch(indexOrder(1), indexOrder(1)) = 0 Then ' Fails with ByRef error
Debug.Print ("Why don't I work?")
End If
End Function
Function GetMatch(A As String, B As String) As Integer
A = Trim(A)
B = Trim(B)
If (IsEmpty(A) Or Trim(A) = "") Then
GetMatch = 1
Exit Function
ElseIf (IsEmpty(B) Or Trim(B) = "") Then
GetMatch = -1
Exit Function
End If
GetMatch = StrComp(A, B, vbTextCompare)
End Function
Function getVariantLength(vari As Variant) As Integer
If IsNull(index) Then
getVariantLength = 0
Else
getVariantLength = UBound(vari) - LBound(vari) + 1
End If
End Function
答案 0 :(得分:0)
你没有Sub vartest()或Function vartest(),它试图调用一个不存在的子/函数,或者至少它不是包括在内。
编辑:你没有对这个功能做任何事情。一个函数会返回一个值,一个子函数将会返回一个值。一些东西。您需要为它返回的任何内容分配一个变量,或者执行MessageBox或其他一些返回值的方法。
下一个问题是它试图调用一个未定义或列出的函数getVariantLength()。