標準モジュールでエラーが発生する理由は?

このQ&Aのポイント
  • アクセスのフォーム上にコマンドボタンを配置し、クリックイベントでフォームを閉じる方法と、標準モジュールでフォームを閉じる方法の違いにより、エラーが発生します。
  • アクセスのフォーム上にコマンドボタンを配置し、クリックイベントでフォームを閉じる場合、DoCmd.Close関数を使用します。
  • 一方、標準モジュールでフォームを閉じる場合、DoCmd.Close関数の引数にフォームの名前を指定する必要があります。しかし、フォームの名前の指定方法が間違っているため、エラーが発生します。
回答を見る
  • ベストアンサー

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

アクセスのフォームの上にコマンドボタンを一つ設置して、 クリックイベントで 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 指定した式は、 いずれか の引数とデータ型が対応していません。 になります。 行ってる意味は同じだと思うのですが、 なぜエラーになるのか教えていただけますか?ご教授よろしくお願いします。

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

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

Closeメソッドの2番目の引数 DoCmd.Close acForm, Me.Name こっちは、Form名 DoCmd.Close acForm, Form_フォーム1 こっちは、Formオブジェクト (Form_フォーム1が フォームだと勝手に解釈) 全然違う。 直すならば DoCmd.Close acForm, Form_フォーム1.Name です。 オブジェクト指向って何?って所から勉強した方がイイ。

clckhfwgtbxou
質問者

お礼

DoCmd.Close acForm, Form_フォーム1.Name にしたらうまくできました。 オブジェクト指向は難しそうですね。でも勉強してみます。ありがとうございました。

その他の回答 (2)

  • masatsan
  • ベストアンサー率15% (179/1159)
回答No.2

forms!...

clckhfwgtbxou
質問者

お礼

DoCmd.Close acForm, Forms!フォーム1 でしょうか・・? 同じエラーになってしまいました。

回答No.1

>いずれか の引数とデータ型が対応 エラー内容を、よく見て、かみ締めて、噛み砕いてください。違うと思いますよ。ちゃんとエラー内容を、検証したのでしょうか? その辺の記載ないですよね。

clckhfwgtbxou
質問者

お礼

自分なりに検証したつもりでしたがわかりませんでした・・・

関連するQ&A

  • 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 何がおかしいのでしょうか? マクロの設定は「全て有効」になっています。 どなたかおわかりになる方おりませんでしょうか。

  • ACCESSのMVBかな?

    ACCESSの検索した結果をテーブルのところに転記する方法はありますか? 例)入力フォームで顧客が多い為「あ」と押してあ行の顧客(顧客情報はID・顧客名など)を検索して別のフォームを開き そこに転記というコマンドのボタンを押すと元の入力フォームに顧客IDが入力される なんてMVBのプログラム教えてもらえませんか? 現状最後の転記だけ出来てません  Option Compare Database Option Explicit Private Sub コマンド7_Click() If kdck = 1 Then Forms![借用入力F]![顧客ID] = Me![顧客ID] DoCmd.Close DoCmd.Close DoCmd.GoToControl "運転者名" End If End Sub Private Sub 閉じる_Click() DoCmd.Close End Sub とあるところから参考でコピーしたMVBのプログラムですがまったく初心者で理解できていません。 どなたか助けてください。

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

    同じマクロ名でも、違うモジュールならエラーにならない? エクセル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つ なら同じマクロ名を使っても、エラーにならないという事でしょうか? よろしくお願いします。

  • 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もつけても駄目でした。 ひとつづつやっていくしかないのでしょうか?

  • テーブル・クエリ・フォーム どれがいい?

    アクセス初心者の為、よくわからないので教えてください。 テーブル1があり そこには ID(主キー/オートナンバー型) フィールド1(テキスト型)があります。 そのテーブルを基にクエリ1作成してます。 [SELECT テーブル1.* FROM テーブル1;] です。 また、テーブル1をレコードソースとしたフォーム1も作成しています。 そして図のようにメインメニューフォームを作成し それぞれのコマンドボタンを設置しました。 モジュールには --------------------------------------------------------- Option Compare Database Option Explicit Private Sub コマンド0_Click() DoCmd.OpenTable "テーブル1", acViewPivotTable End Sub Private Sub コマンド1_Click() DoCmd.OpenQuery "クエリ1", acViewPivotTable End Sub Private Sub コマンド2_Click() DoCmd.OpenForm "フォーム1", acFormPivotTable End Sub --------------------------------------------------------- と書いたので どのボタンを押してもピボットテーブルを開けます。 しかしどれか一つにしたいのですが 今後運用するにおいてどれで開けばいいのでしょうか? ピボットテーブルビューで開くならどれも同じでしょうか? 今回はピボットテーブルビューで表示していますが データシートビューでも表示させたい場合があれば 「フォームなら条件付き書式が設定できるからフォームが良いかなー」 と思っています。 確かテーブルやクエリでは条件付き書式はできなかったような・・・ 全てのビューで開くにおいて テーブル・クエリで開くメリットがあれば教えてください。 ご回答よろしくお願いします。

  • クリックイベントなのに、2回クリックしないとフォー

    クリックイベントなのに、2回クリックしないとフォームが閉じないです。 フォームに閉じると言うコマンドボタンがあり、クリックイベントで Private Sub cmd_閉じる_Click() DoCmd.Close acForm, Me.Name End Sub としてるのですが、なぜか1回ボタンを押しただけではフォームが閉じません。 2回目押した時にフォームがとじます。 ダブルクリックでも閉じます。 Private Sub cmd_閉じる_Click() 'DoCmd.Close acForm, Form_Fフォーム.Name End Sub のように、フォーム名を指定すると1回のクリックで閉じます。 しかしMe.Nameだと2回目じゃないと閉じない理由がわかりません。 Fフォームは他フォームから DoCmd.OpenForm Form_Fフォーム.Name, acNormal で開いたから2回クリックしないと閉じないのでしょうか?

  • アクセスVBAのエラーについて

    フォームを閉じるためにフォームにボタンを置いて、イベントプロシージャに下記のように書き込みました。すると添付画像のエラーが返ってきてマクロが動きません。 Private Sub コマンド103_Click() On Error GoTo Err_コマンド103_Click DoCmd.Close Exit_コマンド103_Click: Exit Sub Err_コマンド103_Click: MsgBox Err.Description Resume Exit_コマンド103_Click End Sub で、「ファイル-オプション-現在のデータベース」の”フォームの表示”を問題のフォームに切り替えたら問題なく動作します。 つまり”フォームの表示”で選んだフォームでしかコマンドボタンのマクロが動きません。全てのフォームでマクロが動くにはどうしたらよいのでしょうか?

  • コマンドボタン名を取得して変数に代入したい。

    OS:windowsXp Access Version:Xp 既出でしたらすみません。 INDEXのフォームにて複数コマンドボタンを作り、それを押すと各登録フォームや集計フォームが開くようにしています。 さて、質問なのですが、コマンドボタンで別のフォームを開く時の処理を(フォーム名が違うだけで後は同じなので)まとめて書きたいのです。 現在は次のようにやっています。 ------------------------------------------------- Private Sub F_メニュー_Click() Call close_form DoCmd.OpenForm "F_メニュー", acNormal, , , acFormEdit, acWindowNormal End Sub Private Sub F_売上伝票_Click() Call close_form DoCmd.OpenForm "F_売上伝票", acNormal, , , acFormEdit, acWindowNormal End Sub      (中略) Private Sub 事業所別集計_Click() Call close_form DoCmd.OpenForm "F_事業所別集計", acNormal, , , acFormEdit, acWindowNormal End Sub Private Sub 消費税変更_Click() Call close_form DoCmd.OpenForm "F_消費税変更", acNormal, , , acFormEdit, acWindowNormal End Sub Private Sub システム終了_Click() Call close_form DoCmd.RunCommand acCmdExit End Sub Private Sub close_form() msgbx = False DoCmd.Close acForm, "index", acSaveYes End Sub ------------------------------------------------- これを  ボタン名_Click() ではなく  frm_open() 押されたボタン名を変数に取得(ボタン名=Form名にします。) DoCmd.OpenForm 押されたボタン名変数 のように共有したいのです。 どうすれば出来ますでしょうか?ご指導よろしくお願いします。

  • 標準モジュールにpublicで宣言するしかない?

    フォームモジュールと標準モジュールで同じ変数を使って値を行き来したい場合、 標準モジュールにpublicで宣言するしかないのでしょうか? 【フォームモジュール】 Private Sub cmd_コマンド0_Click() test = "aaa" Call 標準モジュールtest End Sub 【標準モジュール】 Public test As String Sub 標準モジュールtest() MsgBox test End Sub でいいのですか?

  • アクセスのマクロ

    友人がアクセスで作ったマクロです。3行目で止まってしまいます。どこが悪いのでしょうか。(私は全くの素人でわかりません) Private Sub 記載事項入力ボタン_Click() DoCmd.Close acForm, "初期画面", acSaveYes DoCmd.OpenForm "入力フォーム", acNormal ←ここ End Sub

専門家に質問してみよう