Microsoft Access 掲示板

PDF表示後、SetFocus が効かない / 3

7 コメント
views
3
hatena 2025/02/25 (火) 09:39:40 修正

 バーコードリーダーは「コード検索」テキストボックスにコードを読み込んだあと、Tabキーを送信する仕様です。
ですので、バーコードリーダーを1回クリックすると、「コマンド24」ボタンにフォーカスが移動し、
「コード検索」のLostFocusイベントで、「コマンド24」をクリックさせる。
クリックさせることによってPDF表示させて「コード検索」に戻すという動作になります。

 読み込み前は「コード検索」にフォーカス、読み込み後も最終的には「コード検索」にフォーカスといういことですよね。

ひょっとするとCall コマンド24_Clickはコマンド24にフォーカスがないと有効でないと勘違いしているのかな?
Call コマンド24_Clickはコマンド24にフォーカスがなくても実行されます。

前の回答でもいいましたが、LostFocusイベント内で「コード検索」に戻すことはできません。
繰り返しになりますが質問のコードだと詳細に説明すると下記のような動作になります。

コード検索_LostFocusイベント発生(コード検索にフォーカスがある状態)
  Call コマンド24_Click実行
    「WEBブラウザ」にPDF表示

    [Forms]![フォーム1]![コード検索].SetFocus
     ↑この時点ではコード検索にフォーカスがある状態なので無意味なコマンド

コード検索_LostFocusイベント終了後
  Tabキーの動作により次のコントロール(コマンド24)にフォーカス移動

つまり、LostFocusイベント内でSetFocusを実行しても無意味ということです。

そして、最終的に「コード検索」にフォーカスがある状態にしたいのなら、Exitイベント(フォーカス喪失時)でイベントをキャンセルします。

とりあえず下記のコードで想定の動作になりませんか。

Option Compare Database
Option Explicit
Dim コード検索更新 As Boolean

Private Sub コード検索_AfterUpdate()
    Debug.Print コード検索.Value
    コード検索更新 = True
End Sub

Private Sub コード検索_Exit(Cancel As Integer)
    '更新されていて、かつ、12桁の数字(JANコードを想定)になっている
    If コード検索更新 = True And Me.コード検索.Text Like "############" Then
        Cancel = True  'イベントのキャンセル
        Call コマンド24_Click
    End If
    コード検索更新 = False
End Sub

Private Sub コマンド24_Click()
  '以下略

バーコードリーダーは利用したことがないのであくまで想像で書いたコードですので想定の動作になるかは分かりません。
また、12桁のJANコードという想定が書いていますので、実際のコードの仕様に合わせて変更してください。

通報 ...