[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2006/11/28(Tue) 00:13
投稿者名:PostCode
Eメール:
URL :
タイトル:
Collection型について
VB6.0のコレクション型についてお聞かせください。
私はVB6.0のCollectionはArrayListと同等と思っていたのですが、

Private col As Collection
Set col = New Collection

Private Sub Form_Load()

    col.Add 1
    col.Add 2
    col.Add 3

End Sub

Private Sub Command1_Click()

    Dim obj As Object
    For Each obj In col
        MsgBox CStr(obj)
    Next

End Sub

上記コードにてフォーム上からコマンドボタンを押しても
エラー「オブジェクトがありません」と言われます。
VBなら自動でラッパークラスにして配列のように扱えると思ったのですが‥。

上記コードのエラー回避方法をお教えください。


また、Collectionに保持した値を変更するにはどうしたらいいのでしょうか?
例えば、

    col.Item(2) = col.Item(2) + 1
    ※ colの2番目要素はAdd関数を用いてすでになんらかの値が入っているものとする。

上記のコードはエラーになります。
なので、現状では

    col.Add col.Item(2) + 1, , 2
    col.Remove 3

のように、もともとあった位置に変更した値を挿入し、
前の値は次にあるはずなのでそれを削除するようにしています。

なにかいい方法がありましたらご教示願います。

投稿時間:2006/11/28(Tue) 01:07
投稿者名:
Eメール:
URL :
タイトル:
Re: Collection型について
>     Dim obj As Object
>     For Each obj In col
>         MsgBox CStr(obj)
>     Next
> 上記コードにてフォーム上からコマンドボタンを押しても
> エラー「オブジェクトがありません」と言われます。
> VBなら自動でラッパークラスにして配列のように扱えると思ったのですが‥。
VB6はオブジェクト型がすべての型を表現できる型ではありません、Variantにしてください

> また、Collectionに保持した値を変更するにはどうしたらいいのでしょうか?
削除して追加するしかありません

投稿時間:2006/11/28(Tue) 01:20
投稿者名:PostCode
Eメール:
URL :
タイトル:
Re^2: Collection型について
> VB6はオブジェクト型がすべての型を表現できる型ではありません、Variantにしてください
そうなのですか、知りませんでした。

> 削除して追加するしかありません
やはりそうなのですね。

すばやい回答ありがとうございます。
非常に助かりました。

投稿時間:2006/11/28(Tue) 15:08
投稿者名:LESIA
Eメール:
URL :
タイトル:
Re^3: Collection型について
Collectionではなく、Dictionaryをつかってはどうでしょうか?

Option Explicit

Private dic As Object

Private Sub Form_Load()

    Set dic = CreateObject("Scripting.Dictionary")
    
    dic.Add Key:=1, Item:=1
    dic.Add Key:=2, Item:=3
    dic.Add Key:=3, Item:=5
End Sub

Private Sub Command1_Click()

    Dim obj As Variant
    
    For Each obj In dic
        MsgBox CStr(obj)
    Next

End Sub

Private Sub Command2_Click()
    Dim i As Long
    
    For i = 1 To dic.Count
        MsgBox dic.Item(i)
        dic.Item(i) = dic.Item(i) + 1
        MsgBox dic.Item(i)
    Next i
End Sub