• ベストアンサー

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

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

  • rieury
  • お礼率100% (526/526)

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

  • ベストアンサー
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.1

> どこにもフォーカスを当てたくないです これを実現した後の操作はどのようになっていますか。 ・マウスを使ってターゲットをクリックして・・・ ・「Enter」「Tab」キーで移動したい・・・ 見た目で良いでしょうか。 簡単な方法では、透明なコマンドボタンを配置して、そこにフォーカスを移動します。 配置場所としては、クリックしなさそうな場所や、大きさを極小さくとか・・・ ・コマンドボタン「btnDmy」を作成します。 ・プロパティを変更していきます。  「透明」を「はい」  「タブストップ」を「いいえ」、「タブ移動順」を先頭に Form_Open なり Form_Load で Me.btnDmy.SetFocus を記述します。 「Enter」キーが押された時に、あるところにフォーカスを動かしたければ、 そのボタンの「クリック時」に処理を記述すればよいと思います。 「Tab」キーでは次に移動します。 非連結のフォームとか、帳票フォーム等でコマンドボタンが配置できれば上記で。 配置できないデータシート表示の場合は、レコードを選択してあげれば、 一ヶ所が強調されることはなくなります。 Dim bFirst As Boolean Private Sub Form_Load()   bFirst = True End Sub Private Sub Form_Current()   If (bFirst) Then     DoCmd.RunCommand acCmdSelectRecord     bFirst = False   End If End Sub これはデータシート表示だけではなく、連結したフォームで使えるものになりますが、 次の操作でマウスで選んであげる動作が必要になります。 (「Enter」「Tab」キーでは選択レコードが変わるだけです) また、フォームの構成により使えない方法だったりと。 前者の方が良いと思いますが、参考にする/しない等々自己責任でお願いします。

rieury
質問者

お礼

とても参考になりました。ありがとうございました。

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

  • 半角カタカナがVBAだと全角カタカナになる

    フォームを作って「フォーム1」にしてその上に「テキスト1」を置きました。(どちらも半角です) Private Sub Form_Open(Cancel As Integer) Form_フォーム1.テキスト1.Value = "a" End Sub にすると自動でフォームがフォームのように全角になります。 なのでこの状態でフォームを開こうとすると、 Form_フォーム1の部分でコンパイルエラーになります。 (変数が定義されてません) Private Sub Form_Open(Cancel As Integer) Me.テキスト1.Value = "a" End Sub にするとうまく行きました。 でもテキスト1は、半角のままです。 フォームだけが全角になってしまいます。これは何と言う現象でしょうか? なるべくオブジェクト名には半角を使わない方がいいのですか? ・・・と今質問分を書いて見直したら、gooでも半角を全角に自動修正するんですね。

  • アクセスVBA コンパイルエラー

    フォームを開いた時にフォームの高さを設定したいので Private Sub Form_Open(Cancel As Integer) Me.Height = 12000 End Sub としてるのですが「.Height =」の部分がコンパイルエラーになってしまいます。 何がいけないのでしょうか?

  • フォームを表示してからメッセージボックスを表示する

    メッセージボックスが表示される前に、フォームを表示させたいです。アクセスです。 ナビゲーションウインドウからフォームをダブルクリックしてフォームを開くのですが、 今のままだとメッセージボックスが表示されてからフォームが表示されてしまいます。 フォームを表示してからメッセージボックスを表示するにはどうすればいいでしょう? Private Sub Form_Open(Cancel As Integer) MsgBox "Form_Open" End Sub だと、先ほど述べたように、メッセージボックスが表示されてからフォームが表示されてしまいます。 フォームを開いたときのイベントは複数あるようで、 Private Sub Form_Activate() MsgBox "Form_Activate" Debug.Print "Form_Activate" End Sub Private Sub Form_Current() MsgBox "Form_Current" Debug.Print "Form_Current" End Sub Private Sub Form_GotFocus() MsgBox "Form_GotFocus" Debug.Print "Form_GotFocus" End Sub Private Sub Form_Open(Cancel As Integer) MsgBox "Form_Open" Debug.Print "Form_Open" End Sub Private Sub Form_Load() MsgBox "Form_Load" Debug.Print "Form_Load" End Sub をすると、 ・Form_Load ・Form_Activate ・Form_GotFocus ・Form_Open ・Form_Current の順に開きますが、やはりフォームが最後に表示されてしまいます。 どうにかして先にフォームを表示させる方法はないでしょうか? ご回答よろしくお願いします。

  • マウスが触れるとテキストを表示し離れる非表示にする

    アクセスです。 フォームにラベルを設置して、 そのラベルにマウスが触れたらテキストボックスを表示させたいのです。 フォームのオープンイベントは Private Sub Form_Open(Cancel As Integer) Me.テキスト2.Visible = False End Sub になっています。 ラベルのマウスボタン解放時イベントで Private Sub ラベル0_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Me.テキスト2.Visible = True End Sub にして、ラベルをクリックするとテキストボックスが表示されます。 マウスボタン移動時イベントで Private Sub ラベル0_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Me.テキスト2.Visible = True End Sub にすると、理想通りラベルからマウスが触れたらテキストボックスが表示されます。 ここまではいいのですが マウスのカーソルが離れたら またテキストボックスを非表示にしたいのですがどうすればいいですか?

  • Access2002_メソッドまたはデータメンバが見つかりません

    社員情報を入力・変更していくためのフォームがあります。 そのフォームが立ち上がる際  ・新規入力画面を表示させる  ・フォーカスを[データ入力更新日]テキストボックスに合わせておく という操作をさせたく下記のようなコードを書きました。 Private Sub Form_Open(Cancel As Integer)  DoCmd.GoToRecord Record:=acNewRec  Me.txt_データ入力更新日.SetFocus End Sub フォームを立ち上げようとすると「.txt_データ入力更新日」が反転されタイトルで書いたエラーメッセージが表示されます。 試しに他のテキストボックスにフォーカスがいくよう変更してみるとエラーは起こらず 指定したテキストボックスにフォーカスが置かれてフォームが開きました。 [txt_データ入力更新日]の名前はプロパティからコピペしているので間違っておりません。 名前が違っている以外にどんなことが考えられるでしょうか? よろしくお願い致します。 テキストボックスの名前は間違いありません。

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

  • 新規レコードへ移動しない

    Access2010を使用しています。 サブフォームからメインフォームの「登録」ボタンプロシージャをCallした時、メイン・サブフォーム共に新規レコードへ移動しなくて困っています。 具体的には、サブフォームにフォーカスがある時に「F12」を押すと画面の入力項目の内容刃そのままでメインフォームの「注文番号」テキストボックスにフォーカスが移動します。 メインフォームにフォーカスがあるか、マウスで「F12」をクリックすると画面の入力項目がクリアされて新規レコードへ移動します。 コードは以下の内容が記述してあります。 ーーーーーサブフォーム----- Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Select Case KeyCode Case 123 Call Me.Parent.Form_KeyDown(KeyCode, Shift) KeyCode = 0 End Select End Sub -----メインフォーム----- Public Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Select Case KeyCode Case 123 Call 登録_Click KeyCode = 0 End Select End Sub Private Sub 登録_Click() DoCmd.GoToRecord , , acNewRec Me.注文番号.SetFocus End Sub

  • テキストボックスの桁数をカウントして、フォーカス移動

    Win2000、VB6.0です。 テキストボックスとADOコントロールを使用して、レコードを編集・更新するフォームを作っています。 ただ、簡単に書く為に下の説明文ではDBについては書きません。 Form1に、Text1とText2があるとします。 Tab移動だけではなく、Text1に4桁目まで入力された時点で、Text2へフォーカスが移動するようにしたいと考えています。 Text1のChangeイベントで、 ------------------------------------ Private Sub Text1_Change()   If Len(Text1.Text) >= 4 Then     Text2.SetFocus   End If End Sub ------------------------------------ 以上のように記述しています。 ただ、Form1のロード時に、 ------------------------------------ Private Sub Form_Load()   Text1.Text = "1111" End Sub ------------------------------------ 以上のように記述すると、 「実行時エラー"5";」 「プロシージャの呼び出し、または引数が不正です。」 とエラーが発生してしまいます。 ロード時にテキストボックスに表示しつつ、入力された現在の桁数をカウントして、フォーカス移動する方法は無いのでしょうか? よろしくお願いします。

  • (Cancel As Integer)の使い方

    アクセスのフォームを開く時のイベントには、 Private Sub Form_Open(Cancel As Integer) となっていますが、 (Cancel As Integer) は何のためにあるのでしょう? フォームを開く時にやりたいことをフォームモジュールに書いていますが (Cancel As Integer)がある意味や、使うタイミングがわかりません。

専門家に質問してみよう