if
ステートメント内の別の関数から関数を呼び出すときに奇妙な問題が発生しています。私はこの関数をテストするために使用しているSub
を定義し、値を比較するために使用する別の関数に依存する関数を呼び出します。コードは以下の通りですが、これは明確にする必要があります。基本的には、print
ステートメントでコードが正常に動作し、GetMatch
関数でエラーが発生する可能性があります。私はどんな助けにも感謝します。VBA ByRef引数型の不一致If関数内の関数の使用時に
編集:突然すべてが機能します。デバッグ中のブレークポイントはプログラムに影響しますか?私は何も変更していませんが、GetMatchを呼び出すときにCStr()は必要なくなりました。私は、サブまたは関数のいずれかに触れていないが、私はいくつかのブレークポイントをクリアした。それが原因で見つかった場合は、解決策を投稿します。みんな助けてくれてありがとう。
Edit2:おそらくこれはVBAのバグですか? indexOrder(...)呼び出しにCStr()オプションを追加すると、何かが機能します。以前は、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
Cstr()を使用して値をstrに変更するときにGetMatchが機能する場合は、なぜIF文で使用しないのですか? 'GetMatch(CStr(indexOrder(1))、CStr(indexOrder(1)))= 0 Then' –
これはうまくいきますが、なぜですか? TypeNameはVariantに文字列値を返します。なぜそれが引数として渡されませんか? – RWA4ARC