2017-06-03 6 views
0

私は、以下の機能を持っている: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 

私はこのwiを含む多くのフォーラムを検索しました成功する。誰にもお返事ありがとうございます。

+0

arrには何が含まれていますか? – inarilo

+0

申し訳ありませんが、質問を更新しました。 – Dooey

答えて

2

問題は、これら2つのラインである...

If EntryInTable > 0 Then 
     Debug.Print EntryInTable 

は機能EntryInTableは、2つのパラメータを必要とするため、あなたはいずれかを渡していません。

代わりに...ので、関数が呼び出されたことを一度だけそうでなければ、正しく機能は、これらの行で三回と呼ばれるパラメータを渡す場合でも、あなたの呼び出しサブに整数の変数を宣言し

  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 
+0

関数にもエラーがあると思いますが、値が返されません。 – inarilo

+0

さて、私はそうは思わないでしょう。あなたはその機能を試して、その問題に気づいたのですか? – sktneer

+0

いいえ、あなたは正しい – inarilo

0

ここでの呼び出しは不要です。関数は、変数に割り当てられた値で自動的に戻ってこない。 これを入力すると(If EntryInTable > 0)、引数なしで関数を再度呼び出すことになりました。あなたが好きな、別の変数に割り当てる必要があり

Dim entryPoint as Long 
entryPoint = EntryInTable(Target.Value, arr) 
If EntryInTable > 0 Then 
    Debug.Print EntryInTable 
End If 

また、あなたはロングを返すようにEntryInTableを定義する必要があります。

Function EntryInTable(stringToBeFound As String, arr1 As Variant) As Long 

整数VBAで不要です。メモリを節約する必要はありません。ワークシート・データは、より大きなデータ・セットでオーバーフローします。その理由は、賛否両論のように、整数を避けることです。