現在VBAで既存のオブジェクトをカスタマイズする必要があります。
aaaというオブジェクトの下に、新たに自分で
オブジェクトメンバを追加し、そこにオブジェクト、プロパティを
配置していきく必要があります。
(顧客配布時に、一貫したコーディングが出来るように)
aaa.aab.aac
と言うものに
aaa.BBB.CCC
aaa.BBB.QQQ
といった形に、発展させて行きたいのですが
こう言ったことが出来ますか?
ちなみに、aaaオブジェクトの詳細はブラックボックスです。
そして、このこれらを、コーディング時の参照リストにも
追加したいです。
稚拙な質問で申し訳ないですが、よろしくお願いします。
No.2ベストアンサー
- 回答日時:
No.1です。
> この場合同一プロジェクト内でもこう言った細工が出来ますでしょうか?
私自身は殆どAccessVBAしか扱っていないので、「同一プロジェクト」の
認識がずれている可能性がありますが(汗)、1ファイル内に保存されている
モジュール間での参照という意味でよければ、可能です。
なお、クラスを定義したのとは別のファイルであっても、以下の手順を踏めば
使用可能にできます:
1)参照したいクラスの「Instancing」プロパティを、既定の「1-Private」から
「2-PublicNotCreatable」に変更する
(VBEの画面でF4キーを押すと表示される「プロパティウィンドウ」で設定)
2)クラスを定義したファイル内で新規の標準モジュールを作成し、そのクラス
のインスタンスを生成する関数を用意する
(Instancingプロパティが「NotCreatable」なので、そのままでは同一
ファイル内でしかインスタンスを作成できないため、その回避策として)
3)そのクラスを参照したいファイル側で、クラスを定義したファイルに対する
参照設定を行う
※インスタンスを作成する際は、「2)」で用意した関数を使用します。
> aaab.BBB.CCCを作成してみた所、BBBの下にBBB自身が見えてしまって…
下記サンプルのコーディング中、実際に同様の現象を見はしたのですが・・・
こちらの方では、原因は「BBBクラスモジュールで、間違ってBBBプロパティを
定義していた」というものでした(汗)
念のため、BBBクラス内で、BBBという名前のProperty/Sub/Function/変数
を定義・宣言していないか、確認してみてください。
とりあえず、ごくごくシンプルなサンプルを提示してみます(動きませんが、雰囲気
の参考ということで・・・)。
クラスモジュールは使い始めて数ヶ月で拙い限りではありますが、問題解決の
手がかりになれば幸いです。
【「aaab」クラスモジュール】
Option CompareDatabase
Option Explicit
'各プロパティの内容を保持する変数を宣言
Private myaaa As aaa, myBBB As BBB
'「aaa」プロパティ
Public Property Get aaa() As aaa
Set aaa = myaaa
End Property
Public Property Set aaa(NewObj As aaa)
Set myaaa = NewObj
'「aaa」の入替時に「BBB」を初期化するという想定
Set myBBB = Nothing
End Property
'「BBB」プロパティ
Public Property Get BBB() As BBB
Set BBB = myBBB
End Property
Public Property Set BBB(NewObj As BBB)
Set myBBB = NewObj
'「BBB」の入替時に「aaa」オブジェクトの「Update」メソッドを実行する想定
myaaa.Update
End Property
【「BBB」クラスモジュール】
Option CompareDatabase
Option Explicit
Private myCCC As Integer
'「CCC」プロパティ
Public Property Get CCC() As Integer
CCC = myCCC
End Property
Public Property Let CCC(NewVal As Integer)
myCCC = NewVal
End Property
'「DDD」メソッド
Public Sub DDD(AddVal As Integer)
'「CCC」プロパティの値に、指定した値を加算するメソッド、という想定
myCCC = myCCC + AddVal
End Sub
この回答への補足
DexMachinaさん、
できました。アドバイスどおり、組み込んだところ問題なく
動きました。ありがとうございます。
これから、内容を噛み砕いていきたいと思います。
ありがとうございました。
DexMachinaさん、
夜分にありがとうございます。サンプルコード大変参考になります。
しかし、少し格闘しましたが、まだ動くようになっていませんので
週末がんばってみます。
本当に助かります。
No.1
- 回答日時:
> ちなみに、aaaオブジェクトの詳細はブラックボックスです。
これが「ユーザーにとってブラックボックス」というだけならよいのですが、
もしも「プログラマ(tmk2zさん)にとってもブラックボックス」ということだと、
aaaオブジェクトに予め「ユーザー定義のプロパティ追加するメソッド」が
用意されていない限り、無理ではないかと思います。
【AccessVBAでの例】
A)DAO.Databaseへの、独自定義のプロパティの追加
予め「CreateProperty」メソッドが用意されている
→これを使用することで、そのデータベースの内部構造がわからなくても、
独自に定義したプロパティを追加できる。
(展開中のmdbファイル以外のmdbファイル(=詳細が不明のブラック
ボックス)でも、OpenDatabaseで接続を確立できさえすれば、独自
プロパティの追加が可能)
B)Formオブジェクトへの、独自定義のプロパティの追加
プロパティを追加するメソッドは用意されていない
→当該フォームのクラスモジュールに、プロパティの定義を直接記述する
必要があるため、ブラックボックス(=クラスモジュールが開けない)では
対応不可
とりあえず、プログラマにとってはaaaオブジェクトもブラックボックスではない、
ということでしたら、クラスモジュールを使用することで、「aaa.BBB.CCC」と
いった形の参照は可能にできます(→プロパティなどをPublicで宣言すれば
Ok)。
また、Publicで宣言されたプロパティなどは、コーディング時の参照リストに
自動的に追加されます。
(「aaa.BBB.CCC」の形の記述は可能だがリストには追加しない、或いは
その逆というのは(→つまりそれぞれを個別に設定)、多分無理)
おおまかには、以下のような流れになるかと思います。
1)「BBB」を定義するクラスモジュールを作成
2)上記モジュール「CCC」「QQQ」といったプロパティやメソッドの定義・動作を
記述し、保存
3)「aaa」オブジェクトを定義したクラスモジュールに「BBB」プロパティを追加し、
そのデータ型を「1)」で定義したクラスとして宣言
・・・具体例な話でないため、わかりにくいかとは思いますが(汗)、参考まで。
DexMachinaさん、
ご回答ありがとうございます。大分クリアになってきました。
残念ながら、こちらでもaaaはブラックボックスなんです。
追加で質問ですが、今回は仕方がなく、aaaの代わりに
DexMachinaさんのアドバイスの下、aaabというクラスモジュールを
作ってこれに、BBBやCCCを追加していこうと思っていますが、
この場合同一プロジェクト内でもこう言った細工が出来ますでしょうか?
aaab.BBB.CCCを作成してみた所、BBBの下にBBB自身が見えてしまって…
こう言った場合、どういった作り方をすれば良いでしょうか?
よろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript オブジェクト配列の各メンバを任意の式で評価して、その評価値が最大のオブジェクトを返す関数はありますか 2 2023/05/20 15:02
- Visual Basic(VBA) DisplayAlertsブロパティで ”実行時エラー424オブジェクトが必要です” 5 2022/05/15 18:02
- Excel(エクセル) エクセルのVBAの標準モジュールの名前が文字化けしてしまうのですが。。 2 2022/11/28 16:34
- Excel(エクセル) Excel VBA 3 2023/04/22 10:46
- Java オブジェクト指向プログラミングの実践本を紹介してください 3 2022/09/19 04:56
- PowerPoint(パワーポイント) パワーポイントのアニメーションについて 4 2023/06/14 16:25
- Perl perl このテキストファイルを簡単に配列に入れるには? 2 2022/04/27 20:24
- Visual Basic(VBA) VBA アドインについて お詳しい方 ご教授をお願いします。 相談事項 現在以下の対応を実施した所、 1 2022/11/02 16:53
- Illustrator(イラストレーター) Illustratorでオブジェクトの色が勝手に変わって困っています。 4 2022/09/04 18:47
- Excel(エクセル) テキストの背後にあるオブジェクトとは 3 2023/01/03 20:22
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
共通モジュールでDBへの接続と...
-
[VBA] Classから他のClassを呼...
-
VB.netで、動的な型変換を行い...
-
他のモジュールのプロシージャ...
-
WPFでCanvas の子要素にアクセ...
-
用語の意味の違いを教えてくだ...
-
Mapに登録した値を登録した順に...
-
Excel vbaで複数のテキストボッ...
-
worksheetFunctionクラスのVloo...
-
パソコンへの「Dropbox...
-
実行時エラー 438になった時の...
-
VBA シートのボタン名を変更し...
-
ユーザーフォームを表示中にシ...
-
VBA(エクセル)で自動的にボタン...
-
【C#/Java?】try-catchでcatch...
-
Form_Load と Form_Activate の...
-
vbaのエラー対応(実行時エラー...
-
Vba テキストボックス文字を右...
-
IF文に時間(何時から何時ま...
-
「Columns("A:C")」の列文字を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
共通モジュールでDBへの接続と...
-
[VBA] Classから他のClassを呼...
-
コンポーネント指向って、どの...
-
他のモジュールのプロシージャ...
-
用語の意味の違いを教えてくだ...
-
Excel vbaで複数のテキストボッ...
-
VB.netで、動的な型変換を行い...
-
VB.NETにて文字列で指定した関...
-
WPFでCanvas の子要素にアクセ...
-
VBAで、Functionを、クラスモジュール...
-
(初歩)インスタンス化の負担と...
-
Form2の変数をForm1に渡す方法...
-
バウンドプロパティとは?
-
VB ブラウザ
-
VB6で外部から静的アクセスが可...
-
Python クラスとモジュールの...
-
VBA オブジェクト追加
-
ExcelVBAでJavaのHashtableのよ...
-
'StructLayout' の仕様について
-
【JSF】バッキングビーンから別...
おすすめ情報