ACCESSで重複チェック後にフォーカスを移動したい

このQ&Aのポイント
  • ACCESS2003のフォーム上で入力後に重複チェックを行い、重複した場合にエラーメッセージを表示してフォーカスを移動させたいです。
  • エラーメッセージまで上手くいくのですが、フォーカスが移動してくれません。
  • どこが悪いのでしょうか?
回答を見る
  • ベストアンサー

ACCESSで重複チェック後にフォーカスを移動したい

Private Sub 会社名_AfterUpdate() ACCESS2003です。 フォーム上で入力後(更新後処理)に重複チェックをしています。 重複したときにエラーメッセージを出してフォーカスさせたいのです。 エラーメッセージまでは上手くいくのですが、フォーカスが移動してくれません。 どこが悪いのでしょうか? Private Sub 会社名_AfterUpdate() Dim i As Integer i = DCount("*", "tbl取引先", "会社名 ='" & Me.会社名 & "'") If i = 1 Then MsgBox [会社名] & " は登録済みです。" Me![会社名].SetFocus Cancel = True End If End Sub よろしくお願いします

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

  • ベストアンサー
  • palmmy
  • ベストアンサー率38% (841/2170)
回答No.1

AfterUpdateはエンターして、次のコントロールに移動しようとしている時だから、そのまま移動してしまうのではないでしょうか? ■パターン1 Me![会社名よみ].SetFocus (一度次のコントロールに移動する) Me![会社名].SetFocus だとうまくいくと思います。 ■パターン2 更新ボタンをつくり、押すようにする もっとスマートな方法があるかもしれませんが^^;

kanames
質問者

お礼

返答有難うございます。 パターン1の方で上手くいきました! 助かりました、ありがとうございます。

関連するQ&A

  • Accessの更新後処理で特定の条件を満たしている場合、フォーカスを移動させない方法

    テキストボックスの更新後処理で下記のような記述をし、 テキストボックスに1が入力された場合、エラーメッセージを表示した上で、 フォーカスを一度ボタンに移動した後、テキストボックスに移動しております。 SetFocusを二回記述している理由ですが、 フォーカス移動を抑止する為に、Me.テキストボックス.SetFocus のみを記述した所、次の場所にフォーカスが移動してしまい、 下記のように書くと元の場所にフォーカスが戻ってくる為です。 フォーカス喪失時(Exit)の場合、Cancelを使用すればフォーカスの移動を抑止できたのですが、 更新後処理(AfterUpdate)でSetFocusを2回書く以外に フォーカスを移動させない方法をご存知の方がいらっしゃいましたら アドバイスいただければと思います。 ★クラスモジュール Private Sub テキストボックス_AfterUpdate() Call CHECK_TEXT(Me, Me.テキストボックス.Value) End Sub ★標準モジュール Function CHECK_TEXT(MeForm As Form, text As String) If text = 1 Then MsgBox "エラー" MeForm.ボタン.SetFocus MeForm.テキストボックス.SetFocus End If End Function 以上、よろしくお願いします。

  • ACCESSの重複チェックについて

    顧客データをACCESS2003にて作成しています。 フォームにてVBAを用いて重複チェックをしているのですが、件数が多いせいかチェックに時間が掛かっております。(入力済件数は10万は超えております。) テーブル(T_顧客管理)よりチェック出来るようにしており、チェックのフィールドは「住所」にしております。 Private Sub 住所_BeforeUpdate(Cancel As Integer) If DCount("住所", "T_顧客管理", _ "住所='" & Me!住所 & "'") > 0 Then Beep MsgBox "既存のデータと同じ住所が入力されました! " & _ "別の値を入力してください。", _ vbOKOnly + vbExclamation, "重複エラー" Cancel = True Me.Undo End If End Sub 上記の式を入れておりますが、別の方法(式)にて上記と同じ内容にてチェック出来る式があれば教えていただきたいと思いますので、宜しくお願い致します。

  • テキストボックス入力後、警告メッセージを表示し、フォーカスを移動させない方法について

    テキストボックスの入力チェックを行うために下記のようなソースを記述しました。 下記を実行するとテキストボックスにどんな文字を入力してもメッセージボックスを表示し、 フォーカスが移動しない形となっております (厳密にはボタンにフォーカスが移動した後、テキストボックスにフォーカスを移動しています)。 これは Me.テキストボックス.SetFocus のみを記述した所、次の場所にフォーカスが移動してしまい、 下記のように書くとフォーカスが移動していないように見えるため、このようにしました。 ただこの記述はいささか強引な感じなので、これを改良したいと思っております。 2回フォーカスを移動させるのではなく、フォーカス移動を抑止する方法がベストと思いますが、 方法が分からなかったので、何かしらアドバイスをいただけれる方がいらっしゃいましたらよろしくお願いします。 【ソース】 Private Sub テキストボックス_AfterUpdate() MsgBox "エラー" Me.ボタン.SetFocus Me.テキストボックス.SetFocus End Sub 以上、よろしくお願いします。

  • どこにもフォーカスを当てたくない

    フォームを開いたとき、どこにもフォーカスを当てたくないです。 アクセス2003です。 フォームにテキストボックスを1つ設置して、そのフォームを開くと フォーカスがテキストボックス上で、点滅しますが どこにもフォーカスを当てない方法あるのでしょうか? Private Sub Form_Open(Cancel As Integer) Me.詳細.SetFocus End Sub とするとコンパイルエラーになってしまいます。 不可能でしょうか?よろしくお願い致します。

  • AccessVBA  SetFocusとGoToControlが正常に作動しない

    重複番号をチェックする機能を作っています。 重複番号が入力されると、エラーメッセージが出て、 OKを押すと番号を入れるテキストボックスにカーソルが移動し、空白にする、 という機能をつけましたが、 何度試してもカーソルが、隣のテキストボックスに移動してしまいます。 (エラーメッセージが出て、空白にするという動作は正常に行われます) SetFocusとGoToControlで試したのですが、 どちらも駄目でした。 原因が分かりません。 どなたかお分かりになりましたら、教えてください。 コードは下記のとおりです。 Private Sub AMコード_AfterUpdate() If DCount("AMコード", "Q_AM担当者登録チェック") >= 1 Then MsgBox ("すでに存在する番号です。別の番号を振りなおしてください。"), vbCritical, "番号重複" AMコード.SetFocus AMコード = "" End If End Sub

  • ACCESS重複のチェック

    ACCESSで重複チェックをしたいと思います。 現在は電話番号テーブルだけしかありません。 電話番号のテーブルを主キーを使って重複している場合エラーメッセージを出すというものです。保存ボタンもありません。 Private Sub text電話番号_BeforeUpdate(Cancel As Integer) If IsNumeric(text電話番号) = False Then '数字チェック。 MsgBox "電話番号は数字で入力して下さい。", vbCritical Cancel = True ' 処理を取り消します。 Me.Undo End If Dim strmsg As String strmsg = "重複しています" If Not IsNull(DLookup("[電話番号]", "ダブリチェックテーブル", "[電話番号] = [text電話番号]")) Then MsgBox strmsg, 16, "ダブリチェック" Cancel = True '処理を取り消します。 Me.Undo '元に戻します。 Else Cancel = False '処理を続行します。 End If End Sub これに、企業名と出発日という項目を増やしたいと思います。 ですが、何万とある電話番号を一気に入力して調べているので、一回一回企業名と出発日を入れていると生産性が落ちます。 ですので、企業名と出発日は最初の入力だけで次のレコードに移動してを継続させたいのです。そして電話番号以外にカーソルを行かないようにしたいです。 何か良い方法があればご教授お願いします。 ちなみにいろいろ自分なりに試したのですが、重複してエラーを出した場合に企業名にカーソルが飛んだししてうまくいきませんでした。

  • access setfocusについて

    いつもお世話になっております。 いろいろ調べたのですが行き詰っておりまして ご教授お願いします。 下記記述でsetfocusでエラーになってしまいます。 Private Sub コマンド_Click() If IsNull(Me.テキストボックスコントロール名) Then MsgBox "未入力です" Me.テキストボックスコントロール名.SetFocus End If テキストボックスの処理記述 End Sub https://www.moug.net/tech/acvba/0030005.html こちらを参考にしました。 よろしくお願いします。

  • タブキー 自身のコントロールにフォーカスをあてたい

    タブキーで移動しても自身のコントロールにフォーカスをあてたい txt_検索文字と言うコントロールがあり、 txt_検索文字に文字を入力して、タブキーで移動すると、 Private Sub txt_検索文字_AfterUpdate() ’更新処理・・・ Me.Controls("txt_検索文字").SetFocus End Sub のイベントが発生するのですが、 タブキーを押してイベントが終わっても、再度、txt_検索文字のままにしたいのですが、 Me.Controls("txt_検索文字").SetFocus がきいてないようです。 他のコントロールにフォーカスが当たってしまいます。 ようは、タブキーを押してコントロールの更新イベントが発生しても、再度同じコントロールのままカーソルを充てる方法を教えてください。

  • アクセスのコントロールの移動について教えてください

    Win2000、アクセス2000を使用しています。 日付を入力するテキストボックスの更新後処理に以下のVBを組みました。 Private Sub 発送日_AfterUpdate() If Me![発送日] < Me![受注日] Then MsgBox "受注日より前の日付を入力しています。" & vbNewLine & "訂正してください。", _ vbOKOnly + vbExclamation, "発送日" End If Me!発送日.SetFocus End Sub ところが、[発送日]のテキストボックスではなく、次のテキストボックスにカーソルが行ってしまいます。 ちなみに[発送日][受注日]ともプロパティで「g ee\.mm\.dd」という書式を設定しています。 書式の設定とは関係ないと思いますが… よろしくお願いします。

  • Access2010 SetFocusが当たらない

    Access2010です。 VBAにて、あるフォームの、デザイン上、「詳細」の中に存在しているテキストボックスにSetFocusでフォーカスを当てようと思ってます。 1 フォームロード時、フォームの「詳細」は非表示(当然、テキストボックスも非表示) 2 ボタンクリック時、フォームの「詳細」を表示し、テキストボックスにフォーカスを当てる という動作をしているのですが、2でテキストボックスにフォーカスがフォーカスが当たりません。どうしたらフォーカスが当たるのでしょうか? 以下、コードです。 Private Sub Form_Open(Cancel As Integer) Me.詳細.Visible = False End Sub Private Sub cmdボタン_Click() Me.詳細.Visible = True 'テキストボックスにフォーカスを当てる Me.txtテキスト.SetFocus End Sub よろしくお願いいたします。

専門家に質問してみよう