質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.48%

  • VBA

    2377questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

  • Access

    614questions

    Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

AccessのAfterUpdateイベントについて

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 3,834

xxhiroxx_chan

score 26

xxhiroxx_chanと申します。
いつもありがとうございます。

Accessで主フォーム上にサブフォームをいくつか配置しサブフォーム内にデータを入力する画面を作成しました。
複数あるサブフォームは、それぞれのオブジェクト名を付けていますが、ソースオブジェクトはすべて同じフォームです。
サブフォームは連結フォームで、画面にデータを入れればレコードソース(テーブル)にそのまま値が登録されるのですが、
レコードソース(テーブル)の一部のフィールドは、レコード毎にサブフォームのAfterUpdateイベントにて、
vba上でセットする作りにしたいと思っています。

そこで以下のような問題が起きています。
(1)あるサブフォームでの入力を完了して、別のサブフォームに移り入力を開始するタイミング
(2)主フォームに置いている更新ボタンを押すタイミング
の直前に手入力したレコードには、AfterUpdateイベントが発生しません。

一般的にAfterUpdateイベントが発生しない、ということはカーソルが移動していないため、ということになると思いますので、フォーカスを強制的に移動しようと試みているのですがうまくいきません。

ご助言お願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

まず、Accessのバージョンは何でしょうか?
また、AfterUpdateイベントが発生しないのは、どの様に確認されましたか?

AfterUpdateイベントに記述した処理結果がテーブルに更新されなかったからという事でしたら
手入力したデータが編集中状態であり、更新前の値を参照したから
発生して無いように見えただけでは?

その場合、Recalcメソッドを呼ぶだけで直ります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/02/22 17:37

    回答頂きありがとうございました。

    ご指摘の通り、AfterUpdateイベントは毎回発生していたが、更新すべきレコードではないレコードが更新されていたことがわかりました。

    Recordsetの現在行は、AfterUpdateイベントを呼び出すたびにフォームの行に関係なく変わることがわかったので、フォームのCurrentRecordをRecordsetの現在行とすることで解決できました(以下)。

    Me.Form.Recordset.AbsolutePosition = Me.Form.CurrentRecord

    ありがとうございました

    キャンセル

0

書いてただいた条件でやってみましたが、事象は再現せず、Form_AfterUpdateイベントは正常に実行されるようです。

試した手順

  1. 新規accdbファイル作成
  2. テーブル1作成
  3. テーブル1から連結フォーム1作成
  4. 空白のフォームとしてフォーム2を作成
  5. フォーム2に埋め込みフォームを2つ配置し、いずれもデータソースをフォーム1に設定
  6. フォーム1にAfterUpdateイベントでMsgBox "Hello"を追加
  7. 実行

何か別のコードがイベントを邪魔してるんじゃないでしょうか。
データベースファイルを複製し、余計なコードを消してやってみるとうまくいくかもしれません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/02/18 11:33

    回答頂きありがとうございました。
    私も新規でファイルを作成し試したところ、thom.jpさんがおっしゃっている通り、必ずAfterUpdateイベントが発生します。基本的にはそうなるはず、と認識できたので、コードを見直してみようと思います。

    キャンセル

同じタグがついた質問を見る

  • VBA

    2377questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

  • Access

    614questions

    Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。