VBScript:関数から返されたディクショナリオブジェクトを利用する方法は?

StackOverflow https://stackoverflow.com/questions/140002

  •  02-07-2019
  •  | 
  •  

質問

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

ここに私の機能の関連部分があります:

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

and

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.
役に立ちましたか?

解決

あなたの問題が何であるか確信が持てなかったので、少し実験しました。

オブジェクトへの参照を割り当てるには、戻り値であっても 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

他のヒント

やってみましたか
GetSomeStuff = stuffを設定
関数の最後の行にありますか?

試してみました:

Dim returnedStuff
Set returnedStuff = GetSomeStuff()

その後、「For Each」辞書を繰り返し処理しますか?辞書の使用例があります(VB6の場合でも、その要点は同じです!)ここ

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top