
今仕事でExcelでVBAを使って物を作っているのですが、コードはどこに書くのが一番よいのでしょうか?。たとえば、本を見ると標準モジュールに書いていっているのですが、自分は今ユーザーフォームでコマンドボタンを作ったりコンボボックスを作って、そのボタンをクリックすると自然とPrivate sub オブジェクト名_Click()と出て、その中に書いているのですが、そうすると標準モジュールに書く必要がなくなってしまう気がするのですが・・・。なので一応標準モジュールに内容を移して、フォームのところで関数として呼び出すようにしたのですが、どのように書くのがよいのでしょう?長々すいませんわかりづらかったら後で補足します。
後、今までCを勉強していたのでオブジェクト?メソッド?プロパティ?の書き方が今ひとつ覚えづらいのは慣れでしょうか?
No.3ベストアンサー
- 回答日時:
次ぎのような実験が参考になりませんか。
基本的なことだと思うのですが、初等解説書2冊を読み返しましたが載っていませんでした。ただし下記は理解のため実験的なもので、Module1に書くべきものは、既にご回答があるように、ルールがあり、それに従うべきはいうまでもありません。
(参考までにエクセル95時代はModule1,2、・・が
Sheetになっていて、それにコーディングをして、各コントロールのイベントの呼び出しは、OnAction=”プロシジィヤー名”を使っていました。
(1)
Form1-1 'このSub ProcedureをAと名づける
Private Sub Form_Click()
Msgbox "form1"
aaa
End Sub
Private Sub aaa() 'このSub ProcedureをBと名づける
Msgbox "mod1" ’Form1のコードWindowに記述する
End Sub
実行-開始をクリックすると「form1」がでて、OKで「mod1」のメッセージが出る。
そのルーチンを通ったことの証です。
-----
(2)
上記のBの部分をModule-1のコードWindowに切り取り-貼りつけ
して移す。実行-開始をクリックすると「aaaがSUBまたは・・定義されていません」とエラーが出る。(Privateになっているためが原因)
-----
(3)
上記のBの部分をModule-1のコードWindowに切り取り-貼りつけ
して移す。BのPrivateをPublicに変えて、実行-開始をクリックすると
(1)と結果は同じで上手く行く。Privateを消してしまっても結果は同じ。
----
(4)
AとBを両方ともModule-1のコードWindowに切り取り-貼りつけして
移す。実行-開始をクリックすると、エラーは出ないが、Form1のClickイベントが効いてないようである。Form1実物とForm_Click()のイベントプロシジャー(Module1にある)が関連付けされてないようである。
-----
(5)
Form1に
Sub Form_Click()
bbb
aaa
End Sub
Module1に
Sub aaa()
MsgBox "mod1"
End Sub
Sub bbb()
MsgBox "form1"
End Sub
に記述して。実行-開始をクリックすると上手く行く。
------
(4)に対する対処方法がわたしはわかりません。
お分かりの方は教えてください。これが分かれば、Form1でもModule1でもどちらででも出来ますと納得できると思います。
No.2
- 回答日時:
Privateで宣言された関数は、同じモジュールシート内から呼び出すことができません。
ちょっと愚痴を言うようですが、、、
結構前に、出向に出向して、人の作成したプログラムを見たことがあります。
仕事内容は、すでに作成してあるプログラムのバグ修正でした。
それが、とにかくプログラムが汚い!!
プログラムにはコーディング規約という物があります。変数やコマンドボタンの名前の付け方にも規約があります。これにぴったり沿わなくてもいいとは思うのですが、それでも統一された名前をつけなければ、他の人が見て解読ができません。
プログラムをみて、「ピクチャボックスを制御している/コマンドボタンの機能」と人目でわかるようにすべきです。
そして、各ボタンなどの機能は共通の処理を行う部分があるのであれば、関数化しておくと便利です。他のフォームからも呼び出すのであるのであれば標準モジュール、そうでなければ同じフォーム内のモジュールに書きます。
プログラムを作成する前に「機能分割」を行い、それに沿ったコーディングをしなければ、誰にも相手をしてもらえないプログラマになります。
最近そういった人が多く見られます。特に会社に就職をしたことが無いSOHOの人に多いです。プログラムを他の人に見られることが無いので、ベタ書きをしているからです。
(先に挙げた出向先のプログラムは、アルバイトのSOHO君が書いた物でした。。。)
そういった人は、別のプロジェクトを作成するときも、きっとベタ書きするのでしょうね。
標準モジュールには、「パーツとして扱える関数だけ書いてあり、コピペで他のプロジェクトに引用できるもの」「現在のプロジェクトでしか使わないプロジェクト内部での共通関数や変数」と分けておくと、別のプロジェクトでも、パーツとして扱った関数郡のあるモジュールは、全部使えてしまえます。
これらのことは、VBとかCとかそういう本ではなく、アルゴリズムの本を読んで学ぶことではないかと思います。
(この書き込みは、独自の殻にこもっているSOHOが最近は多く見られるということを言っているので、SOHOの人をけなす意味で書いたものではありません。ぼくも一応SOHO予備軍をしております。。。)
http://search.microsoft.com/default.asp?qu=%83R% …
↑参考URLが長すぎて、リンクが辿れないと思うので、ここに書きます。
以前
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel・ユーザーフォームの情報を受け渡したい 4 2022/06/08 10:11
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) vba メモリ節約 3 2022/09/16 21:45
- Excel(エクセル) エクセルのイベントVBAを複数のシートで動かしたい 1 2022/12/07 16:55
- Visual Basic(VBA) マクロについて教えてください。 4 2023/06/06 09:06
- Access(アクセス) アクセス テーブルの空白を変数に置換するボタンが作りたい 4 2022/07/08 11:19
- Excel(エクセル) 初歩的な質問ですがよろしくお願いします。 Excelのユーザーフォームを作成 ユーザーフォーム内から 5 2022/04/06 20:52
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Excel(エクセル) エクセル VBAでBook モジュールのプロシージァ(コード)に除外シートを設定したい 1 2023/01/11 15:53
- Visual Basic(VBA) VBAでのMATCH関数 3 2022/10/17 19:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBでグローバル変数を宣言するには
-
Form間の値の渡し方
-
Excel VBAで、ユーザーフォーム...
-
レンタルサーバーでのモジュー...
-
モジュールについて教えて下さい。
-
'Range'メソッドは失敗しました
-
モジュールとは何ですか
-
ユーザーフォーム上に表示され...
-
acwzlibとは?
-
VBA モジュールで共通に使う変...
-
モジュールからフォームのボタ...
-
レンタルサーバーのPHPの利用の...
-
エクセルVBAでシートモジュール...
-
VBAで別モジュールへの変数の受...
-
BASP21 のようなコンポーネント
-
Perlでファイルを移動させる命...
-
サーバーサイドでPerlをそのま...
-
モジュールのインストールについて
-
Perl環境移行中。(変なモジュ...
-
自作モジュールを認識しない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAで別モジュールへの変数の受...
-
ユーザー定義関数に#NAME?が返...
-
エクセルVBAでシートモジュール...
-
Excel VBAでリンク切れをチェッ...
-
Excel VBAで、ユーザーフォーム...
-
Excel VBA 定義されたプロージ...
-
VBでグローバル変数を宣言するには
-
vba userFormのSubを標準モジュ...
-
モジュールの最大数はいくつな...
-
【vba】フォームに書いてあ...
-
Excel VBA 『Call』で呼び出す...
-
VBAで旧字体を異字体に一括で変...
-
モジュールとクラスの違いって...
-
モジュールからフォームのボタ...
-
大量の標準モジュールを解放す...
-
acwzlibとは?
-
SendKeysの使い方について
-
標準モジュールを削除したい。(...
-
VBA This Workbookモジュール...
-
VBA モジュールで共通に使う変...
おすすめ情報