VBA函数 – 参数不是可选的
我有以下function:
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
我已经在很多论坛上search过,包括这个没有成功。 感谢任何人的答案。
问题是在这两行中
If EntryInTable > 0 Then Debug.Print EntryInTable
因为EntryInTable函数需要两个参数,所以你没有传递任何参数。
而是在你的调用sub中声明一个整型variables,这样该函数只被调用一次,否则即使你正确的传递了这个参数,函数也会被这些行调用三次。
-
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
这里不需要使用Call。 该函数不会自动返回赋值给variables。 当你input这个时 – If EntryInTable > 0
,你再次调用该函数没有参数。
您需要将其分配给另一个variables,如:
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中是不必要的。 不需要节省内存。 您的工作表数据将在较大的数据集中溢出。 基本上整数是要避免的 – 因为利弊大于利弊。