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,这样该函数只被调用一次,否则即使你正确的传递了这个参数,函数也会被这些行调用三次。

  1. Call EntryInTable(Target.Value, arr)
  2. If EntryInTable > 0 Then
  3. 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中是不必要的。 不需要节省内存。 您的工作表数据将在较大的数据集中溢出。 基本上整数是要避免的 – 因为利弊大于利弊。