我有以下功能:
Function EntryInTable(stringToBeFound As String, arr1 As Variant) As Integer
EntryInTable = 0
Rem default return value if value not found in array
For i = LBound(arr1, 1) To UBound(arr1, 1)
If StrComp(stringToBeFound, arr1(i, 1), vbTextCompare) = 0 Then
EntryInTable = EntryInTable + 1
Exit For
End If
Next i
End Function
该数组包含以下范围数据:
Dim arr() As Variant
Set r3 = Sheets("Konten Tabelle").Range("Tabelle4[[Konto]:[Gruppe]]")
i = r3.Rows.Count
Rem Datenfeld für die Konten-Tabelle
ReDim arr(1 To i, 1 To 2)
For j = 1 To i
arr(j, 1) = r3.Cells(j, 1)
arr(j, 2) = r3.Cells(j, 2)
Next
函数本身似乎工作正常,但是在调用时我收到错误参数不是可选的:
Call EntryInTable(Target.Value, arr)
If EntryInTable > 0 Then
Debug.Print EntryInTable
End If
我在很多论坛都搜索过,包括这个没有成功。感谢任何人的回答。
答案 0 :(得分:2)
问题出在这两行......
If EntryInTable > 0 Then
Debug.Print EntryInTable
因为函数EntryInTable需要两个参数而你没有传递任何参数。
而是在你的调用子中声明一个整数变量,这样只调用一次函数,否则即使正确传递参数,这些函数也会被调用三次......
Call EntryInTable(Target.Value, arr)
If EntryInTable > 0 Then
Debug.Print EntryInTable
您可以尝试这样的事情......
Dim cnt As Integer
cnt = EntryInTable(Target.Value, arr)
If cnt > 0 Then
Debug.Print cnt
End If
答案 1 :(得分:0)
这里不需要使用呼叫。该函数不会自动返回给变量赋值。
当你输入这个 - If EntryInTable > 0
时,你再次调用该函数而没有参数。
您需要将其分配给另一个变量,例如:
Dim entryPoint as Long
entryPoint = EntryInTable(Target.Value, arr)
If EntryInTable > 0 Then
Debug.Print EntryInTable
End If
此外,您必须定义EntryInTable以返回Long:
Function EntryInTable(stringToBeFound As String, arr1 As Variant) As Long
VBA中不需要整数。无需节省内存。您的工作表数据将在更大的数据集中溢出。基本上应该避免整数 - 因为缺点超过专业人士。