フォームのイベントを標準モジュールから呼び出す方法
- フォームのイベントを標準モジュールから呼び出すことはできるのでしょうか?
- フォームを開いている状態でForm_Loadと同じ処理を行いたい場合はどうすればいいのでしょうか?
- 標準モジュールからイベントを呼び出す方法を教えてください。
- ベストアンサー
フォームのイベントを標準モジュールから呼び出す
フォームのイベントを標準モジュールから呼び出す事は出来ないのでしょうか? ちなみにアクセスです。 例えば、 Private Sub Form_Load() MsgBox "test" End Sub というのはフォームを開いたときにしか発生しないですよね。 でもフォームを開いている状態でForm_Loadと全く同じ事をしてほしい時は どうすればいいですか? 標準モジュールで Sub a() Call Form_フォーム1.Form_Load End Sub としてみましたが、メソッドまたはデータ メンバが見つかりません。 (Error 461)になりました。 MsgBox "test" だけなら、 Sub a() MsgBox "test" End Sub にすりゃいいじゃん!って思われがちですが、 実際はForm_Loadイベントにはたくさんのコードが書かれています。 標準モジュールからイベントの呼び出しを教えてください。
- TJORZKTPE
- お礼率100% (36/36)
- オフィス系ソフト
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
ヒントです。 Private で宣言された変数は、書かれたモジュール内だけで有効です。 Public で宣言された変数は、そのDBファイル(ほぼ)全てで有効です。 以下、補足です。 要するに・・DBファイルの標準モジュールに、例えば Public Sub F_Open() MsgBox "開けゴマ" End Sub などと書いておいて、 フォームを開くタイミングでこれを呼び出します。 Private Sub Form_Open(Cancel As Integer) 'または Private Sub Form_Load() でもOK。ここは好みで。 Call F_Open End Sub こんな感じ。 同様に標準モジュールから Sub a() Call F_Open End Sub でも呼び出せますね。 厳密には違うと怒られそうですが、 使い回したいSubは、標準モジュールにPublicで宣言する とバッサリ覚えて、ちょぃちょぃ軌道修正していくのが良いかもですねぇ。 まぁ、モノと処理量に依りますけどね。
関連するQ&A
- 標準モジュールにpublicで宣言するしかない?
フォームモジュールと標準モジュールで同じ変数を使って値を行き来したい場合、 標準モジュールにpublicで宣言するしかないのでしょうか? 【フォームモジュール】 Private Sub cmd_コマンド0_Click() test = "aaa" Call 標準モジュールtest End Sub 【標準モジュール】 Public test As String Sub 標準モジュールtest() MsgBox test End Sub でいいのですか?
- ベストアンサー
- オフィス系ソフト
- リストのダブルクリックイベントをフォーム起動時に発
アクセス2010です。 Private Sub Form_Load() Call lst_test_DblClick End Sub Private Sub lst_test_DblClick(Cancel As Integer) MsgBox "" End Sub このような事は出来ないのでしょうか? リストのダブルクリックイベントをフォーム起動時に発動したいのですが このコードを書くと Call lst_test_DblClick の部分で引数を省略できません。 になります。 どちらもフォームモジュールに書いています。
- 締切済み
- その他MS Office製品
- subプロシージャーは標準モジュールではなくフォームのコードを書く部分
subプロシージャーは標準モジュールではなくフォームのコードを書く部分に書いても問題ないのでしょうか? エクセルにVBAでフォームを挿入し、 「Private Sub UserForm_Initialize()」 などのフォームのモジュールに、 Sub test() MsgBox "あああ" End Sub という標準モジュールに書くべきのsubプロシージャーを書いてもなにもエラーにならないし正常に動きます。 subプロシージャーは標準モジュールではなくフォームのコードを書く部分に書いても問題ないのでしょうか? それともエラーにならなくても標準モジュールに書いた方がいいですか?
- ベストアンサー
- オフィス系ソフト
- VBA 標準モジュールとフォーム
ある標準モジュール内で生成した変数の値をフォームのコマンドボタンをクリックしたら表示されるプログラムはどうやってつくるのですか? 標準モジュール sub test() dim a as integer dim b as integer dim sum as string a=5 b=1 sum=a+b End sub フォームのコマンドボタンクリック Sub CommandButton1_Click() MsgBox sum End Sub 標準モジュールで計算した答えがフォームのコマンドボタンをクリックしたら答え6が表示されるようにしたいのですが、どうしたらできますか?
- 締切済み
- その他(プログラミング・開発)
- フォームを作成すると同時にイベントを作成する方法は
フォームを作成すると同時にイベントを作成する方法は? アクセスなのですが 標準モジュールで Sub フォームを作成() Dim myForm As Form Set myForm = CreateForm DoCmd.Close acForm, myForm.Name, acSaveYes End Sub をしたと同時に、 そのフォーム内に Private Sub Form_Open(Cancel As Integer) MsgBox "開きました" End Sub のようなイベントを同時に生成するにはどうすればいいでしょうか? クラスモジュールを使うのですか? クラスモジュールの使い方がまったくわからないのですが サンプルコードを頂けないですか?
- ベストアンサー
- オフィス系ソフト
- 標準モジュールとイベントの質問
初めて質問します。 ビジュアルベーシックで標準モジュールで ボタンのクリックイベントを実行したいのですが どうやってプログラムすればいいんでしょうか? 今の会社に入っていきなりVBの仕事させられて とっても困っています。 Private Sub Frm1Command1_Click() Call Module1.Frm1Command1_Click End Sub こんな書き方じゃなくて、標準モジュール内で Public Sub Command1_Click() MsgBox "sine" End Sub って書いて実行できるようにしなくてはダメなんです。 どうすればいいんでしょうか? もしかして無理なんでしょうか? これ、上司の嫌がらせだったらイヤですね・・・。
- 締切済み
- Visual Basic
- フォームを表示してからメッセージボックスを表示する
メッセージボックスが表示される前に、フォームを表示させたいです。アクセスです。 ナビゲーションウインドウからフォームをダブルクリックしてフォームを開くのですが、 今のままだとメッセージボックスが表示されてからフォームが表示されてしまいます。 フォームを表示してからメッセージボックスを表示するにはどうすればいいでしょう? Private Sub Form_Open(Cancel As Integer) MsgBox "Form_Open" End Sub だと、先ほど述べたように、メッセージボックスが表示されてからフォームが表示されてしまいます。 フォームを開いたときのイベントは複数あるようで、 Private Sub Form_Activate() MsgBox "Form_Activate" Debug.Print "Form_Activate" End Sub Private Sub Form_Current() MsgBox "Form_Current" Debug.Print "Form_Current" End Sub Private Sub Form_GotFocus() MsgBox "Form_GotFocus" Debug.Print "Form_GotFocus" End Sub Private Sub Form_Open(Cancel As Integer) MsgBox "Form_Open" Debug.Print "Form_Open" End Sub Private Sub Form_Load() MsgBox "Form_Load" Debug.Print "Form_Load" End Sub をすると、 ・Form_Load ・Form_Activate ・Form_GotFocus ・Form_Open ・Form_Current の順に開きますが、やはりフォームが最後に表示されてしまいます。 どうにかして先にフォームを表示させる方法はないでしょうか? ご回答よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- 標準モジュールだとエラーになる理由を教えてください
アクセスのフォームの上にコマンドボタンを一つ設置して、 クリックイベントで 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 指定した式は、 いずれか の引数とデータ型が対応していません。 になります。 行ってる意味は同じだと思うのですが、 なぜエラーになるのか教えていただけますか?ご教授よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- 同じマクロ名でも、違うモジュールならエラーにならな
同じマクロ名でも、違うモジュールならエラーにならない? エクセル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つ なら同じマクロ名を使っても、エラーにならないという事でしょうか? よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- 【VBA】SUBプロシージャーは標準モジュール以外に書いてもいい?
ThisWorkbookのコードを書く場所や Sheetのイベントプロシージャーが実行されるところに Sub test() MsgBox "あああ" End Sub と書いて実行するとメッセージボックスが表示されます。 クラスモジュールとフォームのイベントプロシージャーを書くところではできませんでした。 ということはSUBプロシージャーは 標準モジュールでなくてもいいのでしょうか?
- ベストアンサー
- オフィス系ソフト
お礼
なるほど。標準モジュールのサブプロシージャーにしちゃえばいいのですね。