匿名質問者

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

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

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

回答の条件
  • 1人10回まで
  • 登録:
  • 終了: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~3については
「Set」を使って
sampleClassInstances = sampleClasses.item("こんにちは")

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

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

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

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

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

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

回答リクエストを送信したユーザーはいません