Accessフォームで詳細内の任意の行へSetFocus

このQ&Aのポイント
  • Accessでフォームを作成し、詳細(Detail)内の特定のテキストにフォーカスを設定する方法について教えてください。
  • Form_LoadイベントでDataSourceを設定し、特定のテキストにフォーカスを移動するための方法はありますか?
  • Accessフォームの詳細内で特定のテキストにフォーカスを設定するには、どのようなコードを使用すればよいですか?
回答を見る
  • ベストアンサー

Accessフォームで詳細内の任意の行へSetFocus

お世話になります。 申し訳ありませんが教えてください。 Accessでフォームを作成しました。 Formload時でDataSourceを設定し、その後に 詳細(Detail)内で「●」マークのついているテキストに フォーカスを設定したいのです。 例えば全部で100行あり、画面上は10行しかみえず、 ●が40行目からあった場合は、40行目にジャンプして 見えるような動作を目標にしています。 イメージ的には、回して詳細内の指定テキストボックスに 「●」があったらフォーカスして抜けたい、ということです。 Private Sub Form_Load()   Dim sSql As String   Dim rsSetting As DAO.Recordset   Dim i As Integer   sSql = "select * from 設定マスタ"   Set rsSetting = CurrentDb.OpenRecordset(sSql)   ’マスタの条件に従い再クエリ(設定マスタデータ利用)   sSql = "SELECT ・・・"   Me.RecordSource = sSql   'はじめに●のある位置に移動する   (ここでループのようなことしたい)   for i = 0 to 詳細の件数     if チェックしている行数のテキストボックス.value = "●" then       テキストボックス.SetFocus       exit for     end if   next End Sub こんな感じです。 このくらいならできるだろう、とナメていたら、 ウィザードで作ったフォームの行をどう扱うのか 全く予想がつかない状態なのです。 調べたのですが、調べ方が悪いのか、期待するページが出てきません。 すみませんがよろしくお願いいたします。

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

  • ベストアンサー
  • shut0325
  • ベストアンサー率40% (490/1207)
回答No.1

要約すると、 ・今作っているフォームは表形式で、10レコード分表示される。 ・フォームを開いたときに、とあるフィールドに●と書かれているレコードが一番先頭になるように表示したい。 ということですか? もしそうならば、レコードセット作成後にその中からとあるフィールドに●があるレコード番号を取得しておき、あとはレコード移動アクションでレコードセットの一番最後へ移動→先ほど取得したレコード番号へ移動、、、とすれば良いかと思います。 DAOの記述はあまりくわしくないので割愛しますが、下記のような感じなります。 '----- Dim RecNo as Integer '~レコードセット設定~ '~該当レコード番号取得(RecNoに格納)~ DoCmd.GoToRecord , , acLast DoCmd.GoToRecord , , acGoTo, RecNo '----- 一旦最後のレコードに移動したのは、一番先頭に該当レコードが来るようにするためです。

yasdon
質問者

お礼

お返事が遅れました。 今回作ったフォームは上記のやり方ができなくて やろうと思うとそのフォームだけ毛色が違うことになり。 今後のメンテナンス性から考えて、 ユーザーに相談させていただき、別の方法を取りました。 大変失礼なことになってしまい、申し訳ありません。 有難うございました。

関連するQ&A

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

  • ユーザーフォームのSetFocusが働かない?

    エクセルのユーザーフォームにtextboxが2つとCommandButtonが2つ配置しています。 textbox1に入力されるのを10以下に限定するため、それ以上の数字が入力されるとExit時にエラーを表示し、textbox1にフォーカスを戻したいのです。 ですが、以下のようにするとエラー時にはtextbox2も飛ばしてCommandButton1にフォーカスされます。 どのようにするのが正解なのでしょうか。 よろしくお願いします。 Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) If CInt(TextBox1.Text) > 10 Then MsgBox ("ダメ") TextBox1.SetFocus 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 こちらを参考にしました。 よろしくお願いします。

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

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

  • アクセスのフォームで

    アクセスのフォームで、品番一覧というテーブルを基にした、F品番一覧というフォームがあります。 ヘッダー部に検索するコンボボックスがあり、品番一覧テーブルの品番を参照しています。 検索ボタンを押すと、コンボボックスの内容に当てはまるものが、フォームの詳細部に一覧として表示させる様にしたのですが、品番に"50#1"や"50#2"という#を使い、1と2を分けている物があるのですが、コンボボックスで、この#が付いた物で検索すると検索結果がなにも表示されません。#が付いていない物はちゃんと一覧が表示されます。 #が付いている場合でもちゃんと表示するにはどの様にしたら良いですか?テーブル側の#を取り除く事はできません。 検索ボタンのコードは Private Sub 検索_Click() Dim strFilter As String, strExp As String, aryOpe As Variant If Not IsNull(Me.txt氏名) Then strFilter = strFilter & " AND 品番 Like *" & Me.品番一覧 & "*" End If Me.Filter = Mid(strFilter, 5) If strFilter = "" Then Me.FilterOn = False Else Me.FilterOn = True End If となっています。 うまく説明できなくてすいませんが、誰か教えて頂けませんか? よろしくお願いします。 End Sub

  • 検索フォームで検索するものが決まっているときのかきかた。

    Ac2000です。 T_マスタというテーブルに 名前や所属の課、年度などが入っています。 このTマスタから検索する検索フォームがあります。 検索ボタンがいくつかあり、 年度を検索するようにテキストボックスがあります。 年度テキストボックスにいれた年度で検索しつつ、 押した検索ボタンによって検索する方法はどのようにしたらよいでしょうか? Ex.検索ボタンには所属の課などがかいてあり、「総務」「営業」などどかいてあります。 ソースはこんな感じです。 ------------------------------ Dim SQL As String Dim WhereCond As String Dim condNendo As String '年度 If Me!年度.Value <> "" Then condNendo = "(T_マスタテーブル.年度 = " & CLng(Me!年度.Value) & ")" WhereCond = WhereCond & " AND " & condNendo End If WhereCond = Mid(WhereCond, 6) DoCmd.OpenReport "R_マスタ_一覧", acPreview, , WhereCond End Sub

  • アクセス フォームのテキストボックス内の文字列

    お世話になります。 アクセス使い始めて1ヶ月ぐらいの初心者です。 アクセスのフォーム1に、ファイル参照ボタンを作って フォーム1にテキストボックスも作り、参照ボタンで選んだ path?をテキストボックスに入るようにしました。 次にそのテキストボックスに入ったpathを利用して、外部からテキストファイルを インポートしたいのですが、 インポートボタンを作って、ボタンを押したらテキストボックスに参照して入ってるpathを 取得してインポートできるようにしたいのですが、、、 知恵をお貸しいただけたら嬉しいです。 今作ったのは Private Sub コマンド44_Click() Dim objFileDialog As Object 'FileDialog Dim stTitle As String 'タイトル Dim stPath As String 'ファイルパス Dim stInitialFileName As String '初期ファイルパス If Me.chk.Value = -1 Then stTitle = "ファイル参照" '★ stInitialFileName = "C:\Test\" '★ Set objFileDialog = _ Application.FileDialog(msoFileDialogFilePicker) Else Const msoFileDialogFolderPicker = 4 'フォルダの参照 stTitle = "フォルダ参照" '★ stInitialFileName = "C:\Test\" '★ Set objFileDialog = _ Application.FileDialog(msoFileDialogFolderPicker) End If With objFileDialog 'ダイアログボックスのタイトル .Title = stTitle '初期フォルダパス .InitialFileName = stInitialFileName If .Show = False Then 'キャンセル時 GoTo Exit_SUB Else '★選択時フォルダパス表示 stPath = .SelectedItems(1) Me.テキスト45.Value = stPath End If End With Exit_SUB: Set objFileDialog = Nothing End Sub とゆう感じでテキストボックス45に入ったpathを利用してインポートしたいのです、 文章が読みにくくて申し訳ないです、 よろしくおねがいします。

  • ACCESSのフォーム

    はじめまして。 個人データの管理でACCESSで名簿入力をしています。 入力のフォームを開く際に、 Private Sub Form_Open(Cancel As Integer) Dim Textname As TextBox Dim strmsg As String Dim varname As Variant Set Textname = Me.入力者表示 strmsg = "入力者氏名を入力して下さい" varname = InputBox(strmsg) '入力なき時は、フォームオープンをキャンセルします。 If varname = "" Then Cancel = True End If Textname = varname End Sub として、入力者の氏名を入力しています。 詳細は作成者でないので分かりかねますが、 フォームで非連結のテキストボックスを作成して、 なにかしら表示ができるようになっているみたいです。 これはフォームを開く際に出てきた小さい窓に一度だけ入力者氏名を 入力したら、そのままフォームを閉じるまでその氏名が反映されます。 現在、入力するものにコードというものがあるのですが、これも同じようにできないかと思っています。一日のデータ入力作業では 基本同じコードを使用し、一回一回コードを入力していました。 やはり人間の手によるものですから間違いがあり、 違うコードを入力してしまうと行方不明になってしまうのです。 コードも上記の入力者氏名と同じように、 フォームを開く際に出てくる小窓での入力は可能でしょうか? ちなみに現在商品コードを入力したら、コードの種別タイトルという ものが自動で出力される仕組みになっています。 それも反映されないといけないのです。 なにかお知恵を拝借させていただければと思います。 足りない情報があればご指摘ください。 宜しくお願いいたします。

  • 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 テキストボックスへのセットフォーカスについて

    エクセルVBAでユーザーフォーム内に配置されたテキストボックス への数値の入力時に、指定範囲内になければメッセージボックスで 規格外であることを警告し、その規格外が入力されたテキストボックス を強制的に空欄にし、次のテキストボックスにフォーカスを移動させずに、入力間違いのテキストボックスにフォーカスを戻したいのですが どうすればよいのでしょうか? 自分で考えた構文です。 Private Sub TextBox1_AfterUpdate() Dim A As Single A = TextBox1.Text If A < 1.99 Or A > 3.00 Then MsgBox "規格外!!"     TextBox1.Text = "" TextBox1.SetFoucus End If Exit Sub End Sub これですと、次のテキストボックスにフォーカスが移動してしまいます。 次のテキストボックスにフォーカスを移動させずに、規格内の値が 入力されるまでフォーカスを移動させない方法を教えて下さい。 お願い致します。

専門家に質問してみよう