• 締切済み

Access2000VBAで前に記述したコードが終わる前に次に進みます・・・

フォームを開いた後、Msgboxを表示させたくて、Access2000VBAのOpenイベント又はLoadイベントに、Msgboxを記述しました。 ところが、フォームが開く前にMsgboxが表示されてしまします。フォームが開いた後Msgboxを表示させるためにはどうしたらよいのですか? また、ADOで接続したテーブルの数値型フィールドの合計値を計算して、計算結果をテキストボックスに代入するコードを記述した後、このテキストボックスの値をMsgboxに表示させるコードを記述たところ、計算を終える前にMsgboxが表示されてしまいます。 前のコードが確実に実行された後、次のコードの処理に進む様にするにはどうすればよいのですか?

みんなの回答

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 方法の一例ですが。 まず前半の方は、Timerイベントを使用する方法があります。 フォームのプロパティの[タイマ間隔]にミリ秒で値を指定し(1秒なら1000)、タイマ時(Timer)イベントにMsgBox表示のコードを書きます。 ただし、Timerイベントはタイマ間隔ごとに発生しつづけるので、タイマ間隔に0を指定してストップさせます。 Private Sub Form_Timer()   Me.TimerInterval = 0   MsgBox "略" End Sub これで1回だけ発生します。 次に後半ですが、計算結果表示のテキストボックスが、ユーザーが入力することがなければ、このテキストボックスのChangeイベントにMsgBoxのコードを書いてはどうでしょうか。 これなら計算(して表示)後にMsgBoxが表示されると思いますが。

関連するQ&A

  • AccessのVBAの記述について

    たびたびお世話になります AccessのVBAで、フォーム上にあるテキストボックス(CadrDate)のデータを同一フォーム内の別のテキストボックスに貼り付ける操作はできるのでしょうか? 出来るのであれば記述文を教えてください。

  • vba(Access2003)の記述情報

    こんばんは。 遅くに質問失礼します。 只今、Access2003のvbaを記述しており、エラーが出て困りましたので質問いたしました。 初歩的な事かと思うのですがご指導下さいませ。 AccessのフォームにテキストボックスA、テキストボックスB、テキストボックスC、作成し、フォームロード時に編集ロックをしたいと思います。 ※------------------------------ Me.AllowEdits = False とか プロパティの編集ロック はい/いいえ を利用しない方法を探しています。 -------------------------------- 現在vbaの記述は Private Sub Form_Load()  Dim Tbox As Variant  Tbox = Array("テキストボックスA", "テキストボックスB", "テキストボックスC")  Dim i As Integer  For i = LBound(Tbox) To UBound(Tbox)   [Tbox(i)].Locked = True ★  Next i End Sub を記述すると★行にエラーが発生します。 勉強のため色々ためしてみました。 試(1)…For文を外し短文で [テキストボックスA].Locked = True とした場合には問題なくロックできました。 試(2)…For文を外し短文で [Tbox(0)].Locked = True とした場合にはエラー。 試(3)…変数内確認のため MsgBox Tbox(0) とした場合「テキストボックスA」と出ます。 試(4)…For文を外し短文で [ & Tbox(0) & ].Locked = True や [ + Tbox(0) + ].Locked = True 試しましたがエラー・・・(当たり前でしょうが、、、 試(5)…googleで『vba [] 文字列 結合』等色々調べましたがあまり良い例に辿り着けず、、、 ご教授いただければ幸いです。 何卒、宜しくお願い致します。

  • AccessのVBAにおいて,アクセスフォームに表示されている「値」を

    AccessのVBAにおいて,アクセスフォームに表示されている「値」を変数の中に格納したい。  例えば,オートフォームの単票形式でフォームを作成した場合,「番号」「製品」といったフィールドが2個あるテーブルを使うと,「番号」「製品」という名前のテキストボックスが2個ほどできます。 (フィールド名やテキストボックス名は問題ではありません。) このフォーム上に「ボタン」を配置し,このボタンをクリックした時に,「製品」というテキストボックスの内容を,メッセージボックスで表示させたい。 MsgBox (Me.製品.Text) と書いてもエラーとなります。 実際には,このフォームで欲しいデータを見つけた時,ボタンクリックで,テキストボックスに表示されている内容をグローバル変数に格納したいのですが,方法が分かりません。 Access 初心者です。どなたかよろしくお願いします。

  • Form1_Loadイベントのコードよりプロパティが優先?

    vb2005です。 フォーム1にDataGridView1を設置し、アクセスのテーブルにバインドしています。 デザインのプロパティでは「30」、 コードの Form1_Loadイベントには Me.DataGridView1.RowTemplate.Height = 15 として実行すると、 最初は30の行の高さで表示され、 フィールド部分をクリックして並べ替えると、 15になります。 Form1_Loadイベントに、 MsgBox(Me.DataGridView1.RowTemplate.Height) Me.DataGridView1.RowTemplate.Height = 15 MsgBox(Me.DataGridView1.RowTemplate.Height) としてみたら、 「30」→「15」となりました。 と言うことは、フォーム表示時には15にならなければいけないのに、30の高さで表示されます。 どういうことなのでしょうか? よろしくお願いします。

  • 1つ前のレコードのフィールドをコピーするVBAについて

    あるフィールドに入力する時、1つ前のレコードと同じ値であれば、Ctrl+2で簡単に入力出来ますね。 それで、更に入力の手間を省くために、これもVBAで自動化しようと思ったのですが、はてどうしたらと行き詰まってしまいました。 入力用のフォームを作っておいて、いくつかのフィールドに入力するテキストボックスをいくつか作って、そのうち1つはほとんど同じ値を持つとすれば、このフォームの更新前のイベントプロシージャが適切かと思います。このフォームに入力しようとしたら、即座にほとんど決まった値を持つフィールドに、1つ前のレコードの値が入るというようなコードになるかと思います。そのコードの1例を教えて頂けますか?また、他のいい方法はあるのでしょうか? 以上、よろしくお願い致します。

  • Access-VBAのPublic変数について =基本的な事です=

    フォームAのテキストボックスに入力された値をフォームBで使用したいのですが、調べるとPublic変数に値を代入しておけばフォームAを閉じても値を保持できるとの事でした。 そこで、 (1) 標準モジュール(My_Moduleという名前)を作成しそこに1行Public Hensu as Long と定義しました。 (2) フォームAにボタンを作成し、そのクリックイベントに、 Hensu=Text1.Value というコードを記述しました。 (3) フォームBにボタンを作成し、そのクリックイベントに、 Text1.Value=Hensu というコードを記述しました。 フォームBのボタンをクリックすると、Text1に値が代入されるかと思いましたが、意に反しHensuの中身はNullでした。 どのようにすればフォームBで変数の値を取得することが出来るのでしょうか? ちなみにフォームAからPublic Hensuには値が代入されているようで、イミディトウインドウで?Hensuとするとちゃんと代入された値が表示されます。

  • アクセスVBAについて

    こんにちわ。 アクセス初心者です。 分からないので質問をさせていただきます。 アクセスにて テーブルAの中のフィールドBがあるとします。 その中の値には 1 2 A 1 1 A ァ 1 等がある場合と 単に数字の 1 12 123 等がある場合があります。 それを区別するために フォームのボタンを押せば 記号あり。 記号ななし。 と表示するようにしたいのですが フォームのイベントプロシージャにはどのように記述すればよろしいでしょうか。 IsNumericを使って数値か判断するのかなとは思っています。 If IsNumeric([A]) = Then  MsgBox "記号あり。" Else MsgBox "記号なし" End If では全然できなくて、、、 先輩方の知恵をお借りしたくお願いします。

  • 【Access2000】VB記述でつまづいています。

     非連結のテキストボックスを2つ作成し、そのテキストボックスに、それぞれIDとパスワードを入力することにより「TOP」という名前のフォームを開くログイン用のフォームを作成しています。 ・このログイン用のフォーム名は「ログイン」。 ・フォームの中にあるID入力用のテキストボックス名は“txtNamePass” ・同じくパスワード入力用のテキストボックス名は“txtCountPass” ・IDとパスワードを入力した後に開くフォームは「TOP]。  この「ログイン」という名前のフォームにある“txtCountPass”の「更新後処理」の所に以下のコードを記述したところ、IDとパスワードを入力後、「TOP」のフォームは開くのですが、「ログイン」のフォームが閉じないままになってしまいます。  どのように書き直したらいいか御存知の方がいらっしゃったら御教示下さい。  Private Sub txtCountPass_AfterUpdate() Dim TextBoxA As TextBox Dim TextBoxB As TextBox Set TextBoxA = Me.txtNamePass ' --- A Set TextBoxB = Me.txtCountPass Const NamePass = "@@@@" ' --- B Const CountPass = "*****" If TextBoxA = NamePass Then ' --- C If TextBoxB = CountPass Then ' --- D DoCmd.OpenForm "TOP" ' --- E DoCmd.Close , "ログイン" Else MsgBox "パスワードが異なります。", vbOKOnly + vbCritical End If Else MsgBox "IDが異なります。", vbOKOnly + vbCritical End If End Sub

  • Access2010 VBAで文字を数える

    あるデータベースのフォーム内で、テキストボックス内に記載のある任意の文字列の数を数えて変数に格納したいと考えています。 そして、コマンドボタンを押したときに、メッセージボックスで「○件選択しています。」のように表示されるようにしたいと考えています。 色々と検索してみて以下のような記述をしたのですがうまく動いてくれませんでした。(「コンパイルエラー: SubまたはFunctionが定義されていません。」と表示されます。) Dim A As Integer A = Len([txtbox]) - Len(SUBSTITUTE([txtbox], ","))   MsgBox(A & "件の選択しています。") なお、テキストボックス、コマンドボタンは同一のフォーム内においてあります。 また、テキストボックス内で検索したい文字は半角カンマです。 詳しい方がおりましたら、どうぞご教示ください。

  • VBAでSQL文の実行の記述について

    こんにちは。アクセスVBA初心者です。 どなたか教えてください! キーが二つあるテーブルに対して、 クエリやマクロを使わずにSQL文を使って存在チェック処理を行って、 ・0件ならば、画面入力値で登録処理、 ・0件でないならば、画面入力値で担当者名を更新処理 という処理を行いたいのですが、 どのようにVBA上でSQL文を記述し、 上記の条件を記述すればいいのかわかりません。 ちなみにテーブル名は「担当者マスタ」で フィールドは ・「支店コード」→第一キー ・「担当者コード」→第二キー ・「担当者名」 です。支店と担当者の組み合わせはユニークです。 画面フォーム名は「担当者マスタメンテ」で 画面フィールドは ・「支店コード」コンボボックス ・「担当者コード」コンボボックス ・「担当者名」テキストフィールド です。 どうか教えてください!お願いいたします!

専門家に質問してみよう