ここから本文です

ExcelのVBAについて教えてください。 個人の趣味でC++を勉強しているのですが、VB...

fps********さん

2019/8/2602:10:32

ExcelのVBAについて教えてください。
個人の趣味でC++を勉強しているのですが、VBAのclassで出来る機能を教えてください。

①クラスを作成したのですが、継承のやり方が分かりません。

C++だと、
class A{
protected:
int i;

public:
A(){};
virtual ~A(){} = 0;

int get_i(){return i; };
}

class B : public A{
private:
int k;
public:
B(){};
~B(){};
int get_i(){return i+k; };
}

といった継承が出来るのですが、VBAでの
継承・オーバーライド・抽象仮想関数のやり方が分かりません。
VBAでは入れ子クラスにするしか方法はないのでしょうか?

②class内でstatic(静的)変数を使用したいです。
クラスオブジェクトを作成しか数を入れたいのですが、グローバル変数にするしか方法はないでしょうか?
グローバル変数だと、class外からアクセスできてしまうので出来れば、class内で共有の変数を作成したいです。

③VBAは、標準モジュール・クラスモジュール・ユーザーフォームがありますが
プロジェクトエクスプローラーの階層を増やしたいです。
クラスモジュール・標準モジュールでコードを書いていると複数のソースコードを使用します。
標準モジュール
L 関数
l L 処理1
l L 処理2
l
L WinAPI宣言
l L WinAPI
l
L グローバル変数
L g変数

とった事をしたいです。

④ ①の継承が可能な場合、多様性。親クラスの型に子のオブジェクトを使用して
オーバーライドの関数を使い分けるといったことは可能でしょうか?
Class1が親クラス
Class2が子クラスの場合

Function Class(親 as Class1)
msgbox 親->get_i()
Function End

sub main()
Dim 子クラス as Class2

call Class(子クラス)

sub end

という事オブジェクトの作成は可能でしょうか?
関数の引数にクラスオブジェクトを渡したいです


多くの質問申し訳ありませんがご回答お願いします。

閲覧数:
31
回答数:
1
お礼:
250枚

違反報告

ベストアンサーに選ばれた回答

fro********さん

2019/8/2609:52:11

全てにお答えしているわけではありませんが・・・。

① → 残念ながらVBAのClassは継承はできません
継承もどきならできなくはないので、下記のページを参考にしてみてください。
https://foolexp.wordpress.com/2012/03/07/vba%E3%81%AE%E6%93%AC%E4%B...

② → こちらも残念ながら静的な変数やプロシージャはVBAのClassでは使用できません。
静的な変数やプロシージャは標準モジュールに定義しましょう・・・。

③ → プロジェクトブラウザはモジュールを管理するものなので、モジュールの中身までは表示できません。
クラスやメンバーの検索ならオブジェクトブラウザを使用できます。

④は①が不可の為・・・。

質問した人からのコメント

2019/8/28 23:14:43

ご回答ありがとうございます。
継承が出来ないのは予定外でしたが、考慮してVBAを作成していきたいと思います。
オブジェクトブラウザは知らなかったので非常に助かります。
ありがとうございました。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる