VBA函数 - 参数不是可选的

时间:2017-06-03 11:27:08

标签: excel vba

我有以下功能:

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

我在很多论坛都搜索过,包括这个没有成功。感谢任何人的回答。

2 个答案:

答案 0 :(得分:2)

问题出在这两行......

If EntryInTable > 0 Then
      Debug.Print EntryInTable

因为函数EntryInTable需要两个参数而你没有传递任何参数。

而是在你的调用子中声明一个整数变量,这样只调用一次函数,否则即使正确传递参数,这些函数也会被调用三次......

  1. Call EntryInTable(Target.Value, arr)
  2. If EntryInTable > 0 Then
  3. Debug.Print EntryInTable
  4. 您可以尝试这样的事情......

    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中不需要整数。无需节省内存。您的工作表数据将在更大的数据集中溢出。基本上应该避免整数 - 因为缺点超过专业人士。