• ベストアンサー

ACCESS マクロをモジュールに変換した後の実行

こんにちは。 ACCESS 97 を独学で学んでいます。 初歩の初歩だと思うんですが、教えてください。 マクロ作成の例題で、電卓を起動するというのがありました。 アプリケーションの実行-電卓を開く コマンドライン-CALC.EXE とし、保存して閉じて、実行すると電卓が起動します。 そのマクロを、 ツール-マクロ-マクロをVBに変換 とすると、下記のようにモジュールに変換されます。 Option Compare Database Option Explicit '------------------------------------------------- ' マクロ1 '------------------------------------------------- Function マクロ1() Call Shell("CALC.EXE", 1) End Function このモジュールを「デザイン」で開いて、「開始」等で実行することは出来ますが、開いていないときには「実行」ボタンがグレイアウトしています。 閉じた状態で「実行」するのって、どうするんですか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

こんばんは。 先ず、少し用語の説明です。 プロシージャ:実行単位。Sub ~ End Sub または Function ~ End Function がプロシージャです。 モジュール:保存するときの単位。保存するときにモジュール1とか名前を付けられますよね。 実行はモジュールではなくプロシージャであることを注意してくださいね。 で、実行方法ですが・・・ 1.マクロの「プロシージャの実行」アクションで指定(Function 限定) 2.メニューまたはツールバーのボタンとして登録し実行(Function 限定) 3.イベントで実行   例えばコマンドボタンの「クリック時」イベントのボックスに   =マクロ1()   と記述します。これは Function の記述です。Sub ではこのような指定は出来ません。 4.他のプロシージャから呼び出して実行   他のプロシージャのコードの中に   マクロ1   と記述します。   Function なので本来は   変数名 = マクロ1()   と書くべきなのですが、今回は最初の記述でOKです。

megumaru
質問者

お礼

やっと少し見えました。 ああそうか、という感じです。 たしかにEXCEL のVBE も、実行ボタンのようなものを作って貼り付けてやらないと、自分以外の人には使いにくいものですもんね。 マクロで、プロシージャの実行-マクロ1()として、結果を見ることができました。 ところでせっかく書いてくれていますが、SUB とFUNCTION のちがいがわかりません(>_<) VBE はずっとSUB で作成してきました。 ACCESS で「マクロの変換」をして、できるモジュールはFUNCTION なんですね(?_?) また指導をお願いすることもあると思います、本当にありがとうございました。

その他の回答 (4)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんにちは。#2 のWendy02です。 すでに、ご説明があるので、重複しますが、私からひとこと。 >モジュールタブの画面の「実行」ボタンが実行できるようになることはない、ということですね。 そういうことじゃないです。フォームのボタンからクリック時のイベントを設定すればよいのであって、それは、マニュアルなどに載っているはずです。 Access のFunction は、関数として呼び出してあげれば、動きます。プロシージャと関数の本質的な違いは、ここではないはずです。

megumaru
質問者

お礼

> マニュアルなどに載っているはずです。 たしかにそんな表記を、どっかのマニュアルで見たような気がします(いまデスクに山積み)。 今はちょっと、しなければならないことと外れているので、知識の片隅に留め置かせていただきます。 何度もありがとうございました。

回答No.4

こんにちは。 #3 の GreatDragon です。 > SUB とFUNCTION のちがいがわかりません(>_<) Sub プロシージャは、記述したステートメントを実行するだけのシンプルなプロシージャっです。 Function は、何らかの値を返すことが出来るプロシージャです。何でも構わないので関数を 思い浮かべてください。関数は何らかの計算などを実行してその結果を返してくれますよね。 Function は俗に「ユーザー定義関数」と呼ばれています。 上記は一般的な説明ですが、下記は Access のテクニック的な説明です。 恐らく?な箇所があると思います。ご質問のプロシージャは Function ですが、値を返す記述が ありません。で、回答の #3 の 3 をご覧ください。 Function ですと、イベントのボックスにプロシージャ名を記述できます。こうすることにより 複数のコントロールのイベントに共通のプロシージャとして記述できます。Sub だと夫々のコントロール に個別にプロシージャを記述する必要があります。 このような説明でお分かりいただけたでしょうか?

megumaru
質問者

お礼

ご丁寧に何度も、ありがとうございます。(;_;) 関数がFunction なんですね。。 「はあ、なるほど」 と思っても、関数は値を返すものではないかと思ってしまい、この場合のようにプログラムを起動して返す、というのが実感できませんが。。 某入門書にも、「プロシージャの実行」等は、sub は不可とあります。 納得できなくても、そういうものだと解釈して、慣れていくしかなさそうですね。 個人的には、環境が昨日ACCESS 2000になりました(会社がバージョンアップしてくれた) 亀よりも遅いですが、ゆっくりとしたいこと(しなければならないこと)に近づいています。 ありがとうございました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 その後、フォームのボタンなどのクリックイベントに取り付けるのではありませんか?Function のマクロ関数のままでは、どうしようもないと思うのですが。

megumaru
質問者

お礼

どうしようもないものなんですね。。 モジュールタブの画面の「実行」ボタンが実行できるようになることはない、ということですね。 (なんか自分に落ち度があるように、思い込んでしまいました) ありがとうございました。

noname#22222
noname#22222
回答No.1

マクロは、一度も、使ったことがありませんが... 思うに、マクロ=プロシージャ(関数)ですよね! 「大きな計算処理を小さな仕事に分割し、最初ゼロから始める代わりに他人の作成したものを組み合せてプログラムをつくるには関数を使うのがよい。 関数をうまくつくれば、プログラム各部の操作の詳細部を隠すことができるし、細部について知らなくても、全体を明確化し、プログラム変更を容易にすることができる。」 (「プログラミング言語C」82頁) ところで、かかる関数は、プログラムコードで呼び出して使用します。 1、テストフォームを作る。 2、コマンドボタンを配置する。 2、関数をコールするコードを書く。 などしたらどうでしょう!

megumaru
質問者

お礼

ありがとうございました。 どうも、このままでは実行できないらしいということがわかりました。

関連するQ&A

  • ACCESS:97→2002のモジュールの変換エラーについて

    ACCESS97で作成したファイルをACCESS2002に変換したいのですが、 変換中にコンパイルエラー発生しましたとメッセージが表示されてしまいました。 ファイル自体は変換できておりエラーテーブルを見るとモジュールが変換エラーを起こしていました。そのモジュールを実行させるとやはりエラーが出て止まってしまいます。 ~モジュールの内容は~ テーブルを削除するために削除クエリーの実行(これはうまく動いてます。) フォームに入力されたパスのCSVファイルをインポートする。定義名:CSVインポート定義"インポート先:"CSVテーブル" (これがうまく動かないようです。実行させると「このファイルをインポートできません」とメッセージがでます。) 以下のものになります。 Option Compare Database Option Explicit '------------------------------------------------------------ ' CSVインポート ' '------------------------------------------------------------ Function CSVインポート() On Error GoTo CSVインポート_Err Dim parm1 As String parm1 = Forms!報告書作成!インポートパス & " " ' 入力データ削除query DoCmd.OpenQuery "全て削除クエリー", acNormal, acEdit ' インポート実施 DoCmd.TransferText acImportDelim, "CSVインポート定義", "CSVテーブル", parm1, False, "" CSVインポート_Exit: Exit Function CSVインポート_Err: MsgBox Error$ Resume CSVインポート_Exit End Function もし不足な点がありましたら補足させていただきます。 よろしくお願いします。

  • 実行されない

    アクセス初心者です プロシージャの実行をしても 答えがでてきません 何が必要なのでしょうか Option Compare Database Public Function Doreka() Doreka = 1 * 3.305785 End Function

  • On Error Resume Nextを複数のプロシージャーで使うことは不可能ですか?

    Module1に ------------------------------------------- Option Compare Database Option Explicit Sub マクロ1() End Sub Sub マクロ2() End Sub ------------------------------------------- があるのですが ------------------------------------------- Option Compare Database Option Explicit Sub マクロ1() On Error Resume Next End Sub Sub マクロ2() On Error Resume Next End Sub ------------------------------------------- ではなく ------------------------------------------- On Error Resume Next Option Compare Database Option Explicit Sub マクロ1() End Sub Sub マクロ2() End Sub ------------------------------------------- これはできないのでしょうか? エラーになります。 dimもつけても駄目でした。 ひとつづつやっていくしかないのでしょうか?

  • 同じマクロ名でも、違うモジュールならエラーにならな

    同じマクロ名でも、違うモジュールならエラーにならない? エクセルVBAについてご教授ください。 標準モジュールに ――――――――― Option Explicit Sub CommandButton1_Click() MsgBox "" End Sub Sub CommandButton1_Click() MsgBox "" End Sub ――――――――― と同じマクロ名を2つ作ったら、コンパイルエラーになりますが、 上記のコードは一度消して、フォームモジュールに ――――――――― Private Sub CommandButton1_Click() MsgBox "" End Sub ――――――――― を一つ作り、 標準モジュールに ――――――――― Sub CommandButton1_Click() MsgBox "" End Sub ――――――――― を一つ作った場合は、エラーにならずにマクロを実行できました。 これは、フォームモジュールがPrivate Subだからでしょうか? フォームモジュールに1つ、 標準モジュールに1つ なら同じマクロ名を使っても、エラーにならないという事でしょうか? よろしくお願いします。

  • Accessでaccdeへ変換で機能しない

    Access2007で、accdbからaccdeへ変換したのですが、コマンドボタンしか機能しません。 機能するのは、Accessの終了・Excelの出力のみで、クリックしてフォームを開く・フォームを閉じるのボタンを押しても何も起こりません。調べてみると、マクロで設定したボタンは問題ないのですが、VBAで設定したボタンが機能していないようです。例えば下記のような記述をいくつか設定しています。 Option Compare Database Option Explicit Private Sub コマンド21_Click() DoCmd.OpenForm "閲覧メニュー" DoCmd.Close acForm, "メインメニュー", acSaveNo End Sub 何がおかしいのでしょうか? マクロの設定は「全て有効」になっています。 どなたかおわかりになる方おりませんでしょうか。

  • マクロからFunctionプロシージャーを実行する

    マクロからFunctionプロシージャーを実行するには? 標準モジュールに Function アプリケーションのサイズを最大化する() DoCmd.RunCommand acCmdAppMaximize End Function があるのですが、 マクロからこれを実行したいのですが、見つかりませんと言う旨のエラーが発生します。 何が間違ってるのでしょうか? エラー番号は2482が表示されます。 ご回答よろしくお願いします。

  • ACCESSのマクロに関しまして

    お願いします。 ACCESS97で追加クエリを作成し、その後自動起動にしようと思い、マクロで追加クエリを項目に入れマクロを作りました。 マクロを作成する際に、モジュールでレコード追加するテーブルを一度削除しようと思い、「DELETE文」でモジュールを作成し、マクロの追加クエリの前に「プロシージャの実行」でモジュールのプロシージャを実行するようマクロに記述しました。 <マクロ内容> (1)「プロシージャの実行」  (追加クエリで追加するテーブルの中身をDELする) (2)「クエリを開く」  (追加クエリでレコード追加) この用に記述し、マクロ名を「AutoExec」で記述して、ファイルを実行してもマクロが起動しません。 (1)の「プロシージャの実行」までは、実行されているようなのですが(テーブル内確認)、以降の追加クエリが実行されません。 何か他の設定があるのでしょうか? お願い致します。

  • 標準モジュールだとエラーになる理由を教えてください

    アクセスのフォームの上にコマンドボタンを一つ設置して、 クリックイベントで Private Sub コマンド0_Click() DoCmd.Close acForm, Me.Name End Sub とすれば、自身のフォームが閉じます。 しかし、 Private Sub コマンド0_Click() Call test End Sub と、 標準モジュール Option Compare Database Option Explicit Sub test() DoCmd.Close acForm, Form_フォーム1 End Sub にすると、 実行時エラー2498 指定した式は、 いずれか の引数とデータ型が対応していません。 になります。 行ってる意味は同じだと思うのですが、 なぜエラーになるのか教えていただけますか?ご教授よろしくお願いします。

  • Option Compare Database

    vbaで Option Explicit がないと、変数の宣言が強制されないけど、 アクセスには Option Compare Database がありますが、 これはどういう役目をなしてるのでしょうか? これがないとどうなるのでしょうか?

  • エクセルの変数をアクセスでも使いたい。

    エクセルの標準モジュールには Option Explicit Public 文字列 As String Public アクセス As Object Public Sub エクセル側テスト() 文字列 = "あ" Set アクセス = GetObject("C:\db1.mdb") If Not アクセス Is Nothing Then アクセス.Run "アクセス側テスト" End If Set アクセス = Nothing End Sub アクセス(db1.mdb)の標準モジュールには Option Compare Database Option Explicit Public 文字列 As String Sub アクセス側テスト() MsgBox 文字列 End Sub という風にコードを書きましたが やはりアクセスではエクセルで指定した変数が受け継がれません。 これを「アクセス側テスト」のマクロでもmsgboxで「あ」と表示させるにはどうすればいいのでしょうか? よろしくお願いします。

専門家に質問してみよう