10

関数から辞書を返そうとしています。関数は正しく機能していると思いますが、返された辞書を利用する方法がわかりません。

私の機能の関連部分は次のとおりです。

Function GetSomeStuff()
  '
  ' Get a recordset...
  '

  Dim stuff
  Set stuff = CreateObject("Scripting.Dictionary")
  rs.MoveFirst
  Do Until rs.EOF
    stuff.Add rs.Fields("FieldA").Value, rs.Fields("FieldB").Value
    rs.MoveNext
  Loop

  GetSomeStuff = stuff
End Function

この関数を呼び出して、返された辞書を使用するにはどうすればよいですか?

編集:私はこれを試しました:

Dim someStuff
someStuff = GetSomeStuff

Dim someStuff
Set someStuff = GetSomeStuff

someStuff にアクセスしようとすると、エラーが発生します。

Microsoft VBScript runtime error: Object required: 'GetSomeStuff'

編集2:関数でこれを試す:

Set GetSomeStuff = stuff

次のエラーが発生します。

Microsoft VBScript runtime error: Wrong number of arguments or invalid property assignment.
4

3 に答える 3

25

何が問題なのかよくわからなかったので、少し試してみました。

オブジェクトへの参照を割り当てるにはset、戻り値であってもを使用する必要があることを見逃したようです。

Function GetSomeStuff
  Dim stuff
  Set stuff = CreateObject("Scripting.Dictionary")
    stuff.Add "A", "Anaconda"
    stuff.Add "B", "Boa"
    stuff.Add "C", "Cobra"

  Set GetSomeStuff = stuff
End Function

Set d = GetSomeStuff
Wscript.Echo d.Item("A")
Wscript.Echo d.Exists("B")
items = d.Items
For i = 0 To UBound(items)
  Wscript.Echo items(i)
Next
于 2008-09-26T15:18:29.117 に答える
4


set GetSomeStuff = stuff
関数の最後の行で試しましたか?

于 2008-09-26T15:14:43.977 に答える
0

やってみました:

Dim returnedStuff
Set returnedStuff = GetSomeStuff()

次に、「For Each」で辞書を反復処理しますか? ディクショナリの使用例があります (VB6 の場合でも、要点は同じです!) here

于 2008-09-26T15:02:22.370 に答える