匿名質問者
匿名質問者匿名質問者とは「匿名質問」を利用して質問した質問者。
「匿名質問」では、ユーザー名を公開せずに匿名の質問ができます。
詳しくはこちら

VBAにて、Collectionにクラスのインスタンスを入れ、これをインスタンスとして取り出す際にエラーになります。

VBAにて、Collectionにクラス(ユーザ定義オブジェクト)のインスタンスをaddして入れて、インスタンスとして取り出す際にエラーになります。
メソッドチェーンで、インスタンスを取り出さないでインスタンス内部にアクセスする場合はエラーとなりませんが、インスタンスを取り出すとエラーになります。
VBAでコレクションでクラスを扱う方法をご教示いただきたいです・・・。
(Dictionaryだとインスタンス入れられない。)

試してみたコードは追加で貼ります。

回答の条件
  • 1人10回まで
  • 13歳以上
  • 登録:2015/04/24 17:45:33
  • 終了:2015/05/01 17:50:03
匿名質問者

質問者から

匿名質問者2015/04/24 19:12:05

サンプルコード

クラスモジュール

```sampleClass
Public name As String

Public Sub Class_Initialize()
End Sub
```

メインモジュール

```main
Sub testCollection()
Dim i As Integer
Dim sampleClasses As New Collection


Dim sampleClassInstance As sampleClass
Set sampleClassInstance = New sampleClass
sampleClassInstance.name = "hogehoge"
sampleClasses.Add sampleClassInstance, "こんにちは"

Set sampleClassInstance = New sampleClass
sampleClassInstance.name = "fugafuga"
sampleClasses.Add sampleClassInstance, "さようなら"

sampleClasses.Add 5, "おはよう"

'' パターン1
'Dim sampleClassInstances As Variant
'sampleClassInstances = sampleClasses.item("こんにちは") ' エラー 438 オブジェクトは、このプロパティまたはメソッドをサポートしていません
'MsgBox sampleClassInstances.name

'' パターン2
'Dim sampleClassInstances As sampleClass
'Set sampleClassInstances = New sampleClass
'sampleClassInstances = sampleClasses.item("こんにちは") ' エラー 438 オブジェクトは、このプロパティまたはメソッドをサポートしていません
'MsgBox sampleClassInstances.name

'' パターン3
'Dim sampleClassInstances As sampleClass
'sampleClassInstances = sampleClasses.item("こんにちは") ' エラー 91 オブジェクト変数またはwithブロック変数が設定されていません
'MsgBox sampleClassInstances.name

'' パターン4
'Dim sampleClassInstances As sampleClass
'Set sampleClassInstances = sampleClass ' エラー 424 オブジェクトが必要です
'sampleClassInstances = sampleClasses.item("こんにちは")
'MsgBox sampleClassInstances.name

'' パターン5
MsgBox sampleClasses.item("こんにちは").name ' エラーは出ない

'' パターン6
Dim res As Integer
res = sampleClasses.item("おはよう") ' エラーは出ない
MsgBox res

End Sub
```

回答(1件)

匿名質問者

質問者から

匿名質問者2015/04/24 17:46:42

質問文を編集しました。詳細はこちら

匿名回答1号 No.1

匿名回答1号「匿名質問」を利用した質問に回答すると「匿名回答○号」と匿名で表示されます。
「匿名質問」では、ユーザー名を公開せずに匿名の質問ができます。
詳しくはこちら
2015/04/25 14:45:37

パターン1~3については
「Set」を使って
sampleClassInstances = sampleClasses.item("こんにちは")

Set sampleClassInstances = sampleClasses.Item("こんにちは")
とすればいいと思います。

パターン4は
インスタンスではなくクラス名をオブジェクト変数に入れようとしているためエラーになっています。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません