Setfocusについて

このQ&Aのポイント
  • Access2000でVBAを使用している際、テキストボックスに8桁の商品番号を入力する必要があります。しかし、商品番号が8桁でない場合にメッセージボックスを表示するためのコードを実装しても、SetFocus関数が正常に機能しません。他のテキストボックスにフォーカスを移すことはできますが、自分自身にフォーカスを戻す方法が分かりません。解決策をご教示ください。
  • Access2000のVBAで作成しているプログラムで、8桁の商品番号を入力するテキストボックスがあります。商品番号が8桁でない場合には、エラーメッセージを表示するようにしたいと思っています。しかし、SetFocus関数を使用しても、自分自身にフォーカスを戻すことができません。他のテキストボックスにフォーカスを移すことはできますが、元のテキストボックスにフォーカスを戻す方法がわかりません。どのようにすればよいでしょうか?
  • Access2000のVBAを使用して、テキストボックスに8桁の商品番号を入力する必要があります。商品番号が8桁でない場合には、ユーザにエラーメッセージを表示したいと思っています。しかし、SetFocus関数を使用しても、フォーカスを元のテキストボックスに戻すことができません。他のテキストボックスにフォーカスを移すことはできますが、自分自身にフォーカスを戻す方法がわかりません。解決策を教えてください。
回答を見る
  • ベストアンサー

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 でいくのですが、自分のところに フォーカスを戻すのはなにか特別なコマンドがあるのですか? ご指導、お願いします。

noname#12495
noname#12495

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

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.2

こんにちは。maruru01です。 Exitイベントで記述して、 テキスト1.SetFocus の替わりに、 Cancel = True にすればいいと思います。 Private Sub テキスト1_Exit(Cancel As Integer)   Dim Keta As Integer   Keta = Len(テキスト1)   If Keta <> 8 Then     MsgBox "???"     Cancel = True   End If End Sub

noname#12495
質問者

お礼

ありがとうございました。 解決できました。またお願いします。

その他の回答 (1)

  • PAPA0427
  • ベストアンサー率22% (559/2488)
回答No.1

どのイベントに記述されてますか? LostFocusイベントに記述すれば、動作すると思いますが。 AccesのVBAはイベントドブリンですから、記述するイベントによっては思いもよらない動作をします。

noname#12495
質問者

お礼

ありがとうございました。 LostFocusに書いてみたのですが、上手く出来ません。 私の書き方がダメなのかもしれませんね。 また、勉強します。

関連するQ&A

  • VB6 テキストとSetfocus

    今テキストボックスからテキストボックスへ focusを写すのをやっていたのですが、 TEXT1 から TEXT2へ入力した後エンターキーを押したらfocusを写すというのを設定したところ ちゃんとカーソルは移動するのですが どうしてもエラー音が出てしまいます。 現在KEYPRESSに If KeyAscii = 13 Then Text2.SetFocus End If このように書いているのですがなにか間違ってるのでしょうか? エラー音を出さない方法をどなたかご教授ください

  • 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 こちらを参考にしました。 よろしくお願いします。

  • ユーザーフォームの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

  • Excel VBA SetFocus

    環境:Excel 2002です UserForm1での質問です Flame5にTextBox14とTextBox15があります TextBox14とTextBox15のBeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)後 Flame2にあるTextBox1にSetFocusしたいのですがエラーが発生します 実行時エラー 2147467259(800004005) 異なるFlameにSetFocusする方法があるのでしょうか? Flame5の中でTextBox14及びTextBox15のSetFocusはできます TextBox14とのTextBox15のBeforeUpdateのプロシージャです Private Sub TextBox14_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) If Len(Me.TextBox14.Text) <> 0 Then Dim a As Variant a = 100 - Val(Me.TextBox14.Text) Me.TextBox15.Text = a Dim i As Integer For i = 1 To 4 Me.Controls("TextBox" & i).Enabled = True Me.Controls("TextBox" & i).BackColor = &H80000005 '背景色(白色) Next i End If Me.TextBox1.SetFocus End Sub Private Sub TextBox15_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) If Len(Me.TextBox15.Text) <> 0 Then Dim a As Variant a = 100 - Val(Me.TextBox15.Text) Me.TextBox14.Text = a Dim i As Integer For i = 1 To 4 Me.Controls("TextBox" & i).Enabled = True Me.Controls("TextBox" & i).BackColor = &H80000005 '背景色(白色) Next i End If UserForm1.TextBox1.SetFocus End Sub ご支援願います

  • テキストボックス 空白確認

    エクセル VBAで コマンドボタンをクリックすると テキストボックスに空白があった場合 空白のテキストボックスにセットフォーカスしたいのですが 下記のように少ない場合は まだいいですが 多くなってきたとき見易さの面でも簡単にしたいのですが VBだとコントロール配列のインデックス値をループ処理 すればよいと思いますがVBAだとどのようにすればいいのでしょうか? Private Sub CommandButton3_Click() If TextBox2 = "" Then TextBox2.SetFocus ElseIf TextBox3 = "" Then TextBo3.SetFocus ElseIf TextBox4 = "" Then TextBox4.SetFocus ElseIf TextBox5 = "" Then TextBox5.SetFocus End If 御願いします。

  • 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フォームでの時間の妥当性チェック

    ACCESS2003でフォームを作り、時間(2桁)を入力するようにしています。 クエリーを経由していますが、基となるテーブルの型はテキスト型2桁です。 時間は01から24までで 24以上なら入力しなおし、"1"なら01、という風に簡単にエラーメッセージを出したり、内部で変換したりする方法あったら教えてください。 ちなみに現在は If Len([相談時間_開始時]) = 1 Then Me.相談時間_開始時 = "0" & Me.相談時間_開始時 End If If Len([相談時間_開始時]) > 2 Then MsgBox ("相談開始時が3桁以上です") [相談時間_開始時].SetFocus Exit Sub End If のようにフォーカス喪失時にVBでチェックをかけています。

  • OpenOffice.org Basicについて

     OOo.rcg Basicでsheet1のセルA2に入力されている文字列を指定されたバイト(桁)数にしたいんですが(今回は5バイトに指定し、桁数が足りない時はスペースで埋めます。)、メッセージボックスでは欲しい文字列が返ってくるのに、最後のセルへの代入ができません。  この説明文では理解できないかもしれませんが、おかしい所が分かる方教えていただけませんでしょうか? Function tkorigin(strVal As String, siteiketa As Integer) As String Dim moto As string Dim keta As long Dim i keta = len(strVal) moto = strVal if keta <> siteiketa then if keta < siteiketa then for i = 1 to siteiketa - keta moto = moto & " " next else moto = left(strval,siteiketa) end if end if ' msgbox "[" & moto & "]" tkorigin = moto End Function '--------------------------------------------------------------- Sub tameshi Dim strin As String Dim strout As String strin = Thiscomponent.Sheets(0).getCellByPosition(0,1).String strout = tkorigin(strin, 5) strin = strout ' msgbox "[" & strin & "]" 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

  • AccessVBA で月を2桁で入力させたい。

    質問します。 Access2000で日付をフォームから入力させます。 日付は月と日に別れています。その月フォームで「8」と入力するのではなく「08」と入力させたいのです。 (月はテキストボックスです。) そこで以下のようなVBAを書きました。 Private Sub 月_Exit Dim MM As Variant MM = Len(Me!月) If MM = Not 2 Then Msgbox "2桁で入力してください。" Docmd.GotoControl ("月") End if そうしたら、「8」といれても、「08」と入れても メッセージが表示されてしまいます。 さらにGotoControlが効いておらず、次の日付テキスト ボックスにフォーカスが移動してしまうのです。トホホ・・ こんな初歩的な質問でお恥ずかしいのですが・・・ 回答お待ちしております。

専門家に質問してみよう