テキストボックスへSetFocusが聞かない

このQ&Aのポイント
  • QRコード読み込み後にDBに書き込み、テキストボックスへ戻るプログラムを作成していますが、SetFocusがうまく動作しません。
  • 実装したいことは、以下の通りです。
  • 1. txtsTiket(テキストボックス)にQR読み取りデータを挿入する。 2. Split関数を使用して、データを区切り、DBに書き込む。 3. txtsTiket(テキストボックス)に戻る。
回答を見る
  • ベストアンサー

access テキストボックスへSetFocus

QRコード読み込み後にDBに書込み、テキストボックスへ戻るプログラムを作成しているのですが、SetFocusが聞きません。 【実装したいこと】 QRコード内に、カンマ区切りのデータが入っており、QRスキャン後Sprit関数で区切りDBに登録しております。 でその際に、連続して読取出来るようにするために、「AfterUpdate」しております。 【処理】 1.txtsTiket(テキストボックス)にQR読取データを挿入 2.Sprit関数で、データを区切りDBへ書込み 3.txtsTiket(テキストボックス)へ戻る 2.までは問題ありませんが、3.のtxtsTiketへ自動で戻りません。 ○コード Private Sub txtsTiket_AfterUpdate() 'DB変数 Dim db As Database Dim rs As Recordset '変数定義 Dim tID As Integer Dim aly As Variant Dim t店舗CD As Integer Dim t開局日 As Date Set db = CurrentDb() '店舗ID取得 Set rs = db.OpenRecordset("T_ステータス", dbOpenDynaset) rs.Filter = "登録日 " = Date t店舗CD = rs("店舗CD") rs.Close: Set rs = Nothing 'チケットテーブルオープン Set rs = db.OpenRecordset("T_sTiket", dbOpenDynaset) 'チケットID生成 If rs.EOF Then tID = 1 Else tID = DMax("sTiketID", "T_sTiket") + 1 End If 'QRデータ分割 aly = Split(txtsTiket, ",") rs.AddNew rs("sTiketID") = tID rs("店舗CD") = t店舗CD rs("Day-S-No") = aly(0) rs("部門CD") = aly(1) rs("科目CD") = aly(2) rs("チケット名") = aly(3) rs("宿泊日") = aly(4) rs("予約通番") = aly(5) rs("登録日") = Date rs("登録時間") = Time rs.Update Me.txtsTiket.Value = Null ここから ' Me.txtsTiket.SetFocus ' DoCmd.GoToControl "txtsTiket" ここまで rs.Close: Set rs = Nothing db.Close: Set db = Nothing End Sub 下記手法を試しましたが、両方ともうまくフォーカスが移動してくれません。 Me.txtsTiket.SetFocus DoCmd.GoToControl "txtsTiket" また、上記メソッドを、外部プロジージャーにしても動作しません。 DB書込み処理が終わった後、自動的にテキストボックスへ移動する方法はどうしてら良いでしょうかお教え頂けたら幸いです。

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

  • ベストアンサー
回答No.1

他との関係上、問題があるかもしれませんが、 txtsTiket コントロールのプロパティのその他タブにある Enterキー入力時動作 を規定にしておいて、 フォームの読み込み時イベントなどに Application.setOption " Move After Enter" , 0 0= 移動しない、1= 次のフィールド、2= 次のレコード としておけば、txtsTiket が更新されても他のコントロールに移動しなくなります。 (TAB キーでは可) ?Application.GetOption("Move After Enter") で今の設定が確認できます。 ご参考までという事で。

sujino
質問者

お礼

NotFound404様 有難うございます。 希望通りの動作になりました。 「Application.setOption " Move After Enter" , 0」ではエラーになったので、 「Application.setOption "Move After Enter" , 0」で希望通りの動作になりました。 また、一つ勉強になりました。

関連するQ&A

  • コンボボックスの値取得について

    テーブルはAccess2003で作成 VBは6を使用しています。 Access2003で作成したテーブル(t_KEN)の県名をコンボボックス(cmbKen)に表示させ、選択したひとつの県名とその県コードを テキストボックス(txtKENMEI.text、txtKenCode.text)に格納したいと思います。 以下の様にコンボボックスに県名を表示する所までは できたのですが、そこから選択した県名と県コードをそれぞれの テキストボックスに格納する所がわかりません。 初歩的過ぎるのかもしれませんが、初心者であり何卒ご教授頂けます様 お願いいたします。 テーブル(t_KEN) KENCODE KENMEI 1 北海道 2 青森県 3 岩手県 4 秋田県 ・  ・ ・  ・ ・  ・ Private Sub cmbKen_GotFocus() Dim DB As Database Dim RS As Recordset Set DB = OpenDatabase("c:\TEST\jdb.mdb") Set RS = DB.OpenRecordset("t_KEN") Do Until RS.EOF Me.cmbKen.AddItem RS.Fields("KENMEI") RS.MoveNext Loop 'ここ以降の記述が困ってます。 txtKENMEI.Text=・・・ txtKenCode.Text=・・・ RS.Close Set RS = Nothing DB.Close Set DB = Nothing End Sub

  • ACCESS どこがおかしいのか?

    ACCESSで。クエリからフォームを作成し、検索フォームを作成しようとしています。 AND条件とOR条件を作り検索(抽出)を行いたいのですが、何が間違っているのか、 検索をかけるとすべて「登録がありません」になってしまいます。 どこが間違っているのか、もしくは代替案を教えていただけますでしょうか。 以下は記述した、VBAコードです。 Private Sub 検索ボタン_Click() Dim db As DAO.Database Dim rs As DAO.Recordset Dim stFil As String Set db = CurrentDb() Set rs = db.OpenRecordset("Q_Autoweb", dbOpenDynaset) 'オプションボタンで条件を選択 If 検索条件 = 1 Then rs.Filter = "[タイトル]='" & タイトル検索 & "' and [本文]='" & テキスト15 & "'" Else rs.Filter = "[タイトル]='" & タイトル検索 & "' or [本文]='" & テキスト15 & "'" End If Set rs = rs.OpenRecordset Set Me.Recordset = rs If rs.EOF = True Then MsgBox "登録がありません" Else Me.ID = rs!ID Me.案件名 = rs!案件名 Me.タイトル = rs!タイトル Me.本文 = rs!本文 End If rs.Close Set rs = Nothing db.Close Set db = Nothing End Sub よろしくお願いします。

  • 変数に取得した値をテキストボックスやコンボボックスに表示させた

    アクセスで、変数に取得した値をテキストボックスやコンボボックスに表示させたいと思っています。例えば、まずクエリをひとつ作成します。そのクエリのレコードをループで配列変数に取得していきます。フィールド(IDと名前)レコード(件数は2件とします) public ID(2) as String public 名前(2) as String Sub temp() Dim Db As Database Dim rs As Recordset Dim I As Integer Set Db = CurrentDb Set rs = Db.OpenRecordset("Q_クエリ", dbOpenDynaset) rs.MoveFirst For I = 1 To 2 If IsNull(rs![ID]) = False Then ID(I) = rs![ID] If IsNull(rs![名前]) = False Then 名前(I) = rs![名前] rs.MoveNext Next I rs.Close Db.Close End Sub (この時点で変数に値は入っているようです。) フォームで作成したテキストボックスやコンボボックスに実行ボタンをクリックすると表示するというコードは下記のように記述してみました。 Private Sub 実行_Click() Call temp (標準モジュールを呼び出す) ID = ID(1)     名前 = 名前(1) (2)省略 End Sub すると、かならず「実行時エラー'13'; 型が一致しません。」とエラーが出ます。なにぶんVBA初心者になりますので、ご教授お願い致します。ちなみに同じような方法で、同一フォーム内に2つテキストボックスを用意し、片方に値を入力して実行するともう一方のテキストボックスにその値が表示すると言う実験は成功しています。もっと他に良いコードがあれば教えて下さい。お願いします。

  • Setfocus について

    お世話になります。 Access2000でVBAを書いています。 ユーザがテキスト1に商品番号を入れます。ここで商品番号が8桁指定なので Dim Keta As Intger Keta = Len(テキスト1) If Keta <> 8 Then Msgbox"???" テキスト1.SetFocus End If と書きました。 しかし、SetFocusが効きません。他のテキスト(例えば、テキスト2)などにフォーカスを飛ばすことは テキスト2.SetFocus でいくのですが、自分のところに フォーカスを戻すのはなにか特別なコマンドがあるのですか? ご指導、お願いします。

  • VBAでテキストボックスの値の取得について

    環境 OS:Windows2000 Access2000 基本的なことなのですが、教えてください。 テキストボックスから値を取得する場合、 下記のように一旦フォーカスをセットしてからでないと取得できないのでしょうか? DIM TXTVAL AS INTEGER TEXT1.SETFOCUS TXTVAL=TEXT1.TEXT この方法だととても処理が遅いので、なんとかしたいのですが・・・ よろしくお願いします。

  • Accessでのデータベースの使用(VBA)

    Private Sub 実行_Click() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim StSQL As String Set cn = CurrentProject.Connection Set rs = New ADODB.Recordset strSQL = "INSERT INTO マスタ(コード) VALUES(コード) ;" rs.Open strSQL, cn, , adLockOptimistic '//前のコード(エラーになりました。) ' rs.Close 'cn.Close 'Set rs = Nothing 'Set cn = Nothing Set rs = Nothing: Close Set cn = Nothing: Close Accessを使用したvbaのコードの書き方について教えてほしいです。毎度Access の質問ばかりしてすみません。以下のコードはADOを使用してマスタというテーブルを読み込んで最後にrs.CloseでRecordSetを開放しようとしたのですが「オブジェクトが閉じている場合は、操作は許可されません。」というエラーメッセージが出てしまい原因がわかりませんでした。Openしていて開いているはずなのにエラーが出てしまい、 Set rs = Nothing: Closeに変えたら治りました。何故rs.Closeではエラーが出てしまったのでしょうか。 もう一つお聞きしたいです。 strSQL = "INSERT INTO マスタ(コード) VALUES(コード) ;"でコードという名前を付けたテキストボックスの値をマスタテーブルのコードの列に追加したいのですがテキストボックスの値の取り方が分かりません。(コード.Value)とやってみてもだめでした。どうやったらSQL文でテキストボックスの値をテーブルに追加できるんでしょうか。

  • 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 よろしくお願いいたします。

  • Access ADOについて質問です。

    Access ADOについて質問です。 以下コードでレコードセットを返す関数を使用しています。 動作的には問題ないのですが、標準モジュール内のレコードセットをClose及びNothingしていないのが気になります。 Private Sub Form_Open(Cancel As Integer) Dim rs2 As ADODB.Recordset Set rs2 = New ADODB.Recordset Set rs2 = CreateRecordSet("SELECT * FROM T_Standard;") Set Me.Recordset = rs2 rs2.Close: Set rs2 = Nothing end sub '標準モジュール Public Function CreateRecordSet(strSQL As String) As ADODB.Recordset Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection cn.ConnectionString = "provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=O:\標準DB\StandardBackEnd.mdb" cn.Open Set rs = New ADODB.Recordset rs.Open strSQL, cn, adOpenStatic, adLockReadOnly Set CreateRecordSet = rs ' rs.Close: Set rs = Nothing   ←この部分 ' cn.Close: Set cn = Nothing   ←この部分 End Function 標準モジュール内ではCloseやNothingしなくてもメモリの開放は行われているのでしょうか? アドバイスよろしくお願いいたします。

  • アクセスVBAで3つのテキストボックスの連動表示

    アクセス2000のVBAの質問です。どうぞよろしく。 ●「取引銀行」テーブルをつくりました。銀行名、支店名、口座番号を入力してつくりました。 フィールド名も上記の通りです。 ●フォームをつくり、口座番号入力用テキストボックス(テキスト0)、銀行名を表示するテキストボックス(テキスト2)、支店名表示用テキストボックス(テキスト4)の3つを作りました。 ●入力用テキストボックスに1つ口座番号を入れると、その口座番号の銀行名をテキスト2に表示し、支店名をテキスト4に表示するにはどうコーディングすればいいのでしょうか。 Option Compare Database Public db As database Public qd As querydef Private Sub テキスト0_AfterUpdate() Set db = CurrentDb Set qd = db.querydef(\"SQL_Q\") Dim strText As String strText = テキスト0.Text qd.SQL_Q = \"SELECT 銀行名 FROM 取引銀行 \" _ & \"WHERE 口座番号 = \'\" & strText & \"\'\" Me.RecordSource = \"SQL_Q\" テキスト2.SetFocus Me!テキスト2.ControlSource = \"銀行名\" (支店名表示部分は略す) End Sub ある本の例を見て上記のように組んで実行しましたが、銀行名は表示されません(#NAMEのエラー) 入力した口座番号がstrTextにセットされているのは確認できました。 またRecordSourceとControlSourseの区別がよく理解できていません。値集合タイプ、値集合ソースというのはなぜテキストボックスの プロパティにないのでしょうか。

  • ACCESSを用いたデータベースでのコンボボックスの連動について

    おせわになっております。 VBでデータベースを作っているのですが、 コンボボックスでの検索での絞込みがうまくいきません。 例えば、コンボボックス1で選ばれたファールドにより 絞込みが行われ、コンボボックス2で表示するレコードは コンボボックス1で選択されたレコードに該当するものしか表示しないようにするというとです。 どこかおかしい個所はありますでしょうか?? よろしくお願い致します。 Private Sub dbc1_Click(Area As Integer) '1つめのコンボボックス Dim criteria As String ' 検索条件 If dbc1.Text = "" Then Exit Sub End If criteria = "県名 = '" & dbc1.SelText & "'" rs.MoveFirst rs.Find criteria, , adSearchForward dbc2.SetFocus `dbc2にフォーカスを移す End Sub Private Sub dbc2_Click(Area As Integer) ’2つ目のコンボボックス Dim mySQL As String mySQL = "SELECT 市名 FROM 地名" _ & "where 県名 = '" & dbc1.SelText & "'" ’コンボボックス1で選択されたものを抽出条件とする。 Set rs = New ADODB.Recordset rs.Open mySQL, cn, adOpenStatic Set Dbc2.DataSource = rs End Sub