- ベストアンサー
ACCESS マクロをモジュールに変換した後の実行
こんにちは。 ACCESS 97 を独学で学んでいます。 初歩の初歩だと思うんですが、教えてください。 マクロ作成の例題で、電卓を起動するというのがありました。 アプリケーションの実行-電卓を開く コマンドライン-CALC.EXE とし、保存して閉じて、実行すると電卓が起動します。 そのマクロを、 ツール-マクロ-マクロをVBに変換 とすると、下記のようにモジュールに変換されます。 Option Compare Database Option Explicit '------------------------------------------------- ' マクロ1 '------------------------------------------------- Function マクロ1() Call Shell("CALC.EXE", 1) End Function このモジュールを「デザイン」で開いて、「開始」等で実行することは出来ますが、開いていないときには「実行」ボタンがグレイアウトしています。 閉じた状態で「実行」するのって、どうするんですか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 先ず、少し用語の説明です。 プロシージャ:実行単位。Sub ~ End Sub または Function ~ End Function がプロシージャです。 モジュール:保存するときの単位。保存するときにモジュール1とか名前を付けられますよね。 実行はモジュールではなくプロシージャであることを注意してくださいね。 で、実行方法ですが・・・ 1.マクロの「プロシージャの実行」アクションで指定(Function 限定) 2.メニューまたはツールバーのボタンとして登録し実行(Function 限定) 3.イベントで実行 例えばコマンドボタンの「クリック時」イベントのボックスに =マクロ1() と記述します。これは Function の記述です。Sub ではこのような指定は出来ません。 4.他のプロシージャから呼び出して実行 他のプロシージャのコードの中に マクロ1 と記述します。 Function なので本来は 変数名 = マクロ1() と書くべきなのですが、今回は最初の記述でOKです。
その他の回答 (4)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。#2 のWendy02です。 すでに、ご説明があるので、重複しますが、私からひとこと。 >モジュールタブの画面の「実行」ボタンが実行できるようになることはない、ということですね。 そういうことじゃないです。フォームのボタンからクリック時のイベントを設定すればよいのであって、それは、マニュアルなどに載っているはずです。 Access のFunction は、関数として呼び出してあげれば、動きます。プロシージャと関数の本質的な違いは、ここではないはずです。
お礼
> マニュアルなどに載っているはずです。 たしかにそんな表記を、どっかのマニュアルで見たような気がします(いまデスクに山積み)。 今はちょっと、しなければならないことと外れているので、知識の片隅に留め置かせていただきます。 何度もありがとうございました。
- GreatDragon
- ベストアンサー率46% (186/402)
こんにちは。 #3 の GreatDragon です。 > SUB とFUNCTION のちがいがわかりません(>_<) Sub プロシージャは、記述したステートメントを実行するだけのシンプルなプロシージャっです。 Function は、何らかの値を返すことが出来るプロシージャです。何でも構わないので関数を 思い浮かべてください。関数は何らかの計算などを実行してその結果を返してくれますよね。 Function は俗に「ユーザー定義関数」と呼ばれています。 上記は一般的な説明ですが、下記は Access のテクニック的な説明です。 恐らく?な箇所があると思います。ご質問のプロシージャは Function ですが、値を返す記述が ありません。で、回答の #3 の 3 をご覧ください。 Function ですと、イベントのボックスにプロシージャ名を記述できます。こうすることにより 複数のコントロールのイベントに共通のプロシージャとして記述できます。Sub だと夫々のコントロール に個別にプロシージャを記述する必要があります。 このような説明でお分かりいただけたでしょうか?
お礼
ご丁寧に何度も、ありがとうございます。(;_;) 関数がFunction なんですね。。 「はあ、なるほど」 と思っても、関数は値を返すものではないかと思ってしまい、この場合のようにプログラムを起動して返す、というのが実感できませんが。。 某入門書にも、「プロシージャの実行」等は、sub は不可とあります。 納得できなくても、そういうものだと解釈して、慣れていくしかなさそうですね。 個人的には、環境が昨日ACCESS 2000になりました(会社がバージョンアップしてくれた) 亀よりも遅いですが、ゆっくりとしたいこと(しなければならないこと)に近づいています。 ありがとうございました。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 その後、フォームのボタンなどのクリックイベントに取り付けるのではありませんか?Function のマクロ関数のままでは、どうしようもないと思うのですが。
お礼
どうしようもないものなんですね。。 モジュールタブの画面の「実行」ボタンが実行できるようになることはない、ということですね。 (なんか自分に落ち度があるように、思い込んでしまいました) ありがとうございました。
マクロは、一度も、使ったことがありませんが... 思うに、マクロ=プロシージャ(関数)ですよね! 「大きな計算処理を小さな仕事に分割し、最初ゼロから始める代わりに他人の作成したものを組み合せてプログラムをつくるには関数を使うのがよい。 関数をうまくつくれば、プログラム各部の操作の詳細部を隠すことができるし、細部について知らなくても、全体を明確化し、プログラム変更を容易にすることができる。」 (「プログラミング言語C」82頁) ところで、かかる関数は、プログラムコードで呼び出して使用します。 1、テストフォームを作る。 2、コマンドボタンを配置する。 2、関数をコールするコードを書く。 などしたらどうでしょう!
お礼
ありがとうございました。 どうも、このままでは実行できないらしいということがわかりました。
お礼
やっと少し見えました。 ああそうか、という感じです。 たしかにEXCEL のVBE も、実行ボタンのようなものを作って貼り付けてやらないと、自分以外の人には使いにくいものですもんね。 マクロで、プロシージャの実行-マクロ1()として、結果を見ることができました。 ところでせっかく書いてくれていますが、SUB とFUNCTION のちがいがわかりません(>_<) VBE はずっとSUB で作成してきました。 ACCESS で「マクロの変換」をして、できるモジュールはFUNCTION なんですね(?_?) また指導をお願いすることもあると思います、本当にありがとうございました。