Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3680 / 13646 ツリー ←次へ | 前へ→

【60738】VBAクラスにてC++で言うデストラクタはありますか? ペーター 09/3/12(木) 13:37 質問[未読]
【60742】Re:VBAクラスにてC++で言うデストラクタは... neptune 09/3/12(木) 15:06 発言[未読]
【60749】Re:VBAクラスにてC++で言うデストラクタは... stream 09/3/12(木) 17:35 回答[未読]
【60759】Re:VBAクラスにてC++で言うデストラクタは... ペーター 09/3/13(金) 11:31 お礼[未読]

【60738】VBAクラスにてC++で言うデストラクタはあ...
質問  ペーター  - 09/3/12(木) 13:37 -

引用なし
パスワード
   お世話になります。
早速ですが質問させていただきます。
C++のクラスで言う、デストラクタはEXCELのクラスに存在していますでしょうか?
どこかのサイトで terminate という関数があったのを記憶しており、それを組み込んでいましたが、オブジェクト破棄時に呼ばれている形跡ありませんでした。
ご教授よろしくお願いいたします。

【60742】Re:VBAクラスにてC++で言うデストラクタ...
発言  neptune  - 09/3/12(木) 15:06 -

引用なし
パスワード
   ▼ペーター さん:
こんにちは

C++万年初心者の言う事ですので的外れなら失礼。

>C++のクラスで言う、デストラクタはEXCELのクラスに存在していますでしょうか?
>どこかのサイトで terminate という関数があったのを記憶しており、それを組み込んでいましたが、オブジェクト破棄時に呼ばれている形跡ありませんでした。

「EXCELのクラス」ってのがよく判りません。
C++万年初心者の私の理解ではC++はクラスが使えますが、全てクラスで
構成されているわけではありませんよね?最低限WinMainってのがありますから。

Excelの全てのマクロ(VBA)で書いたプログラムとしてのデストラクタという意味ではその答えは「ない」です。

framework風の言い方をするとExcelのクラスでしょうが、
Excel VBAで「EXCELのクラス」という概念があるんですかね?
Excel VBAでクラスと言うとClassモジュールを使用して作成するオブジェクト
の事を指す事が多いと思います。

そういう意味ではterminate はイベントとして提供されており、
Classモジュール、Formオブジェクトなどでは機能すると思いますよ。?

但し、何らかの予期せぬエラーでプログラムが終了した場合とか
インスタンスが正常に破棄されていない場合は別です。

【60749】Re:VBAクラスにてC++で言うデストラクタ...
回答  stream  - 09/3/12(木) 17:35 -

引用なし
パスワード
   >C++のクラスで言う、デストラクタはEXCELのクラスに存在していますでしょうか?

C++のクラスには特別な関数として初期化を行うためのコンストラクタと終了処理を行うためのデストラクタを定義できますが、
VBAでこれに対応するものがクラスのInitializeとTerminateイベントです。

>どこかのサイトで terminate という関数があったのを記憶しており、それを組み込んでいましたが、オブジェクト破棄時に呼ばれている形跡ありませんでした。

正常であればオブジェクトが破棄されるときに呼ばれるので、
組み込みがまずいとか破棄がまずいとかだと思います。

【60759】Re:VBAクラスにてC++で言うデストラクタ...
お礼  ペーター  - 09/3/13(金) 11:31 -

引用なし
パスワード
   ▼neptune さん
▼stream さん
ご指摘ありがとうございます。
仰るとおりクラス「モジュール」の事でした。
無事 Terminate() でオブジェクトの破棄処理を行う事が出来ました。
恥ずかしながら自作で terminate() と作ってしまったのが原因のようでした。
ありがとうございました。

3680 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free