人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

VBAのオブジェクト思考プログラミングについて
現在、VBAのプログラム(ものすごく長いもの)があります。

共通の処理があるのにも関わらず場合分けをして全てコーディングしてある状況です。
最終目標:処理のブロックにわけてプログラムの行数を削減、
必要な処理のチェックボックスを作成して選択、
チェックされた処理のみを適宜処理(もちろんエラー対応有り)

このようなプログラムに修正しようと思っております。
1.Public Sub …A… End Sub
Public Sub …B… End Sub
Public Sub …C… End Sub
という上記A、B、Cをまとめて呼び出す場合、
Public Sub “任意の文字列”
Call A
Call B
Call C
End Subだけ(A、B、Cは処理の記載があるとします。)で動作するのでしょうか?
まだまだVBAを勉強中なのでわからないことばかりです。
ご教示よろしくお願いいたします。


●質問者: keijun5145
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● sasada
ベストアンサー
Public Sub A()
 処理A
End Sub
Public Sub B()
 処理B
End Sub

と名前をつければ、

Public Sub なにがし()
 CALL A
 CALL B
End Sub

または、
Public Sub なにがし2()
 A
 B
End Sub

で、プロシージャの呼び出しは出来ます。
http://www.officepro.jp/excelvba/basic/index1.html
http://www.officetanaka.net/excel/vba/statement/Call.htm

ただ、これは手続き型の処理で、オブジェクト指向とは別の次元の話ですが。。。


keijun5145さんのコメント
ありがとうございます。 ちなみにですが、掲載して頂いたものを例にすると… “なにがし”もしくは“なにがし2”の上でPublicで変数を宣言すれば特に問題は出ないでしょうか? 変数が通用する範囲や変数の内容が保持される期間が不明なので追加で教えて下さい。

sasadaさんのコメント
プログラム全体で使用する変数は、SUbの外側(宣言セクション)で宣言しましょう。例で言えば、Public Sub A()より上です。 Publicと宣言すれば、他のモジュールも含めてプログラム全体で共有できます。 変数の宣言と適用範囲については下記URLからどうぞ。 http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_050_04.html http://officetanaka.net/excel/vba/variable/05.htm

無頼庵さんのコメント
VBはオブジェクト指向の仕組みを持っていません。 もし、クラスと継承の仕組みをVBAで作ったとしたら、VBAを利用することの意味が見えなくなるでしょう。 因みに、共通な処理を整理することは、構造化プログラミングの手法の一つだったと思います。

sasadaさんのコメント
VBAはクラスモジュールを使って「プロパティとメソッドを名前空間で分離できる」ので、広い意味でのオブジェクト指向言語と言えます。言えますが。。。 ただ、smalltalkに始まる、クラスの継承・オーバーロードなどを用いた概念はありません。JAVAなんかと似たコーティングは大変です。同じやり方をしようとするとソースコードが見にくくなったり、クラスモジュールが乱立した入りで、わややになります。 VBAでオブジェクト指向の基礎を学ぶなら、まずは、 +適切なモジュール化(オブジェクト化)←ここが難しい +各モジュールに適切なプロパティ(変数)とメソッド(関数)の設定 を心がけてみてはいかがでしょうか。

keijun5145さんのコメント
VBの初期段階ではオブジェクト指向ではなかったことは知っています。 ただ.netになってから少しずつ変化してきていると思っています。 JAVAやC++とどの程度格差がなくなってきたのかと思って質問させていただきました。 プログラム自体は分割できて問題なく動いているのでこれで質問を閉めたいと思います。 ありがとうございました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ