Excel VBA質問箱 IV

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

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


23966 / 76732 ←次へ | 前へ→

【58121】Re:プロシージャの呼び出し方について
発言  ichinose  - 08/10/4(土) 8:21 -

引用なし
パスワード
   ▼そう さん:
>ところで、教えていただいた解説の中で OnAction を使用すると各モジュール間の結合度が強くなってしまうことが懸念されるとあるのですが、これはいったいどんな不具合に関わってくるのでしょか?

不具合ねえ・・、

プログラムの構造的な問題ですから、このプログラム作成後の問題です。


プログラムのメンテナンスを行うのにそれがしやすい構造になっているか

再利用可能な構造、つまり、他のプログラムで簡単に運用できるような構造になっているか


こんな目的のための判断です。


>と言うのも、もしなるべく OnAction でプロシージャを呼び出すこと自体(呼び出したいプロシージャがフォームモジュールではなく標準モジュールに置かれていても)避けるべきで、極力呼び出したいプロシージャはフォームモジュール内に置いてイベントプロシージャで処理をした方が安全(?)なのならば、今後もこの教えていただいた書き方を活かして行きたいと思っているのですが・・・・・・。

「OnActionプロパティは使うべきではない」という事ではないですよ!!

今回、問題対象になっているコマンドバー(ポップアップメニュー)を
標準モジュールで一括管理するようなプログラム構造ならば、
その中でOnactionプロパティに標準モジュールのプロシジャー名を指定することは
まったく問題ないと思います。

むしろ、事象によっては、Onactionプロパティの方が、安定した動作が保証されます。

Private WithEvents btn_FirstStringConv As Office.CommandBarButton
Private WithEvents btn_SecondStringConv As Office.CommandBarButton

これらの変数が何かのタイミングで初期化されてしまうという現象が発見されています。
(シートやExcelの機能を自由にユーザーが使えるような仕様で その間も上記のような
イベントを発生させるようなオブジェクト変数の中身をきちんと保持させたい
場合は、要注意です。
今回の場合だと、ユーザーフォームがモーダレスで表示するような仕様だと問題が発生する可能性があります。私は、モーダル表示を前提にしての投稿です)


が、

今回の場合は、Onactionプロパティに直接ユーザーフォーム内のプロシジャーが
指定できないので中継役として標準モジュールのプロシジャーを使っているのですよね?

そもそもコマンドバーのボタンクリック時の処理として、
ユーザーフォーム内のプロシジャーを指定したいということは、このコマンドバーが
ユーザーフォームと深く関わっているからだと思います。
(ユーザーフォームが表示されている時だけ、使用可能なコマンドバーで、
しかもその機能が当該ユーザーフォームに特化した機能の場合)

もし、標準モジュールを中継にした場合、


このユーザーフォームの仕様書には、

但し書きとして、

「このユーザーフォームを運用の際は、
標準モジュールに中継としてのプロシジャーとして、

以下のプロシジャーを記述しなけれなならない」

なんて、記述が必要になってしまいます。

Excelが提供しているWorkbookやWorksheetやRange等のオブジェクトに
こんな但し書きがあったら、使いづらいことこの上ないですよね?

ユーザーフォームもオブジェクトです。

出来る限り、こういう但し書きが要らない仕様にするべきだという
立場からの意見です。


但し、前述したような不具合に対処するためなら、これらの構造的なことは
目をつぶらなければならないでしょうねえ・・・。

プログラム構造に重きをおくあまり、バグ連発ではお話になりませんから・・・。

3 hits

【58113】プロシージャの呼び出し方について そう 08/10/3(金) 1:28 質問
【58114】Re:プロシージャの呼び出し方について ichinose 08/10/3(金) 6:55 発言
【58115】Re:プロシージャの呼び出し方について そう 08/10/3(金) 9:29 発言
【58121】Re:プロシージャの呼び出し方について ichinose 08/10/4(土) 8:21 発言
【58122】Re:プロシージャの呼び出し方について そう 08/10/4(土) 9:59 お礼

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