• 締切済み

Accesss97の更新後処理

amaniaの回答

  • amania
  • ベストアンサー率22% (2/9)
回答No.1

カーソルの位置が入力値(フル桁)の後ろに、ありませんか?  123| こんな状態 (|がカーソル) 通常フォーカス移動していくと、フォーカスの来た項目が 反転表示されているはずです。 この状態だとDelキーも使用できますよね。 反転状態(選択)になるようにしてあげたらよいのです。 簡単な方法としては、別の項目に移動して、またフォーカスを戻すというのが有効ではないかと思います。 VBであれば、SelLengthとSelStartプロパティで反転させられるのですが、AccessのTextにはないのではないかと思います。 有効なプロパティなどがあるかもしれませんが、 不勉強なもので。。。 お役に立たないかもしれませんが。 VBAの質問にいろいろ答えてくれるHPがあるので、そちらでも調べられるとよいと思います。

参考URL:
http://www.moug.net/
baha
質問者

お礼

ありがとうございます。 なぜかカーソルは、一番前にきています。 別の項目に移動して戻す、というのも試しましたが結果は同じでした。 でもSelLengthとSelstartは使えそうですね。 ACCESSでできるかどうか試してみます。 参考URLにもいろいろ書いてありそうなので、みてみます。

関連するQ&A

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

  • AccessのエラーチェックでFキーcmdボタンから反映されない

    こんにちは! 質問なのですが、Accessの入力フォームでエラーチェックをかけてます。 「txtMsg」って名前のテキストボックスを1つ用意してエラーの内容を 反映させてます。チェックの内容ですが、Nullチェックと文字数チェック ・禁止文字チェックをかけてます。 >エラーはちゃんと反映します。SetFocusでカーソルをエラー個所に立て て修正します。ここからが問題なのですが、エラー個所を修正したママの 状態(修正個所にFocusがある状態)でFキーcmdボタンの「更新」ボタン を押してもテキストボックスにエラーが出たママなんです。 ちなみにFキーを使用できるようにcmdボタンを12個並べて使っております。 >状況 ・Fキーを使用して更新した場合のみエラー表示が消えない。 >たぶんfocusが移動してないからかな? >Me.事項.SetFocusのような作業が出来ない状況(現状の >txtBOXの「Enterキー入力動作」を「行を追加」にして >いる為)で、Fキーを使用しつつ更新出来るようにするには? ・クリックで「更新」ボタンを押すとちゃんと更新される。 ってわけで困ってます。 何かいい方法を知っていらしゃいましたらご教授願います。 '------------------必須項目の未入力チェック------------------- Me.txtMsg = "" If IsNull(Me.郵便番号) Or Me.郵便番号 = "" Then Me.txtMsg = "郵便番号データが未入力です。( ̄▽ ̄;)!!" Me.郵便番号.SetFocus Exit Sub End If '--------------------図版CD文字数チェック-------------------- strYbn = Len(Me.郵便番号) If strYbn <> 10 Then Me.txtMsg = "『〒000-0000』形式にして下さい! (´∞`)" Me.郵便番号.SetFocus Exit Sub End If

  • Accessでのvbaについての質問

    Accessでのvbaを使用したプログラムについてお聞きしたいです。前にも似たようなことを質問していましたが、まだうまくいってません。マスタメンテナンス画面を作成しているのですがテキストボックスの入力チェック が上手くいきません。テキストボックス はコードという名前をつけています。 以下のコードでコーディングしています。 未入力チェック関数 Public Function EmptyCheck(Koumoku As Variant) As Boolean '引数で渡された項目が入力されているかチェック If Koumoku = ""Then EmptyCheck = True Else EmptyCheck = False End If End Function 桁数チェック関数 Public Function NumberCheck(Koumoku As Variant, Number As Integer) As Boolean If Len(Koumoku) <>Number Then NumberCheck = True Else NumberCheck = False End If End Function 半角英数字チェック関数 Public Function ZokuseiCheck(Koumoku As Variant) As Boolean If IsNumeric(Koumoku) = False And Not Koumoku Like "[a-z]*"And Len(Koumoku) <>6 Then ZokuseiCheck = True Else ZokuseiCheck = False End If End Function コード処理 Private Sub コード_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 13 Then ' If EmptyCheck(コード) = True Then MsgBox "コードを入力してください。" コード.SetFocus KeyCode = 0 Exit Sub ElseIf NumberCheck(コード, 6) = True Then MsgBox "コードの桁数が不正です。" コード.SetFocus KeyCode = 0 Exit Sub ElseIf ZokuseiCheck(コード) = True Then MsgBox "コードの属性が不正です。" コード.SetFocus KeyCode = 0 Exit Sub Else コード.Locked = True End If End If 上手くいかない点は以下の通りです。 1、テキストボックス(コード)の未入力チェックが上手く行きません。テキストボックスが空白の時も""になったりNullになったり変わるのでIf Koumoku = ""ThenにしてしまうとNullになった時処理されずそのまま次のテキストボックスにカーソルが移ってしまう時があります。なんでNullになったり""になったりで変わるのかも謎です。あと空白の時、Koumoku=""で一致しているにも関わらず、Falseで返されてしまい、未入力処理がされません。IsNullを使ってNull値判定してもKoumoku=Nullで一致してるのにFalseで返されました。 2、桁数チェックも上手く行きません。コード処理の方で桁数チェック関数に6という数字を渡して6桁入力としているのですが6桁でもエラーになってしまう時があります。LEN関数でどのように文字数を測っているのかも よくわからないです。 3.これは単純に半角英数字の判定の仕方が間違っているんだと思いますが、やり方がよく分からず、上手く判定できません。 4.これは入力チェックに当てはまるのですがEnterキーを押した時に処理するようにコードを書いていましたが変な結果が出ます。最初にテキストボックスでEnterキーを押して未入力の時に、「コードを入力してください。」とメッセージが出るのはいいのですがその後入力してもまた同じメッセージが出てきます。ほかのテキストボックスをクリックしてカーソルを移さないと同じメッセージが出続けます。桁数や半角英数字チェックの時も同じです。他のカーソルをクリックしないと次の項目のチェックにいかず、同じエラーメッセージが出続けます。何とかほかのカーソルに移さずに修正したら正しく処理が通るようにできないでしょうか。 5、最後に何も問題なかったらテキストボックスにロックかけるよう処理をしているのですが「コントロールの変更を保存していないときはコントロールをロックできません」というエラーメッセージが出てくる時があります。意味が分からず調べても出てこなかったので意味のわかる方何が悪くてエラーになっているのか教えて下さい。 調べてもデバッグしても原因が分からないものばかりです。 長文になってしまいましたがわかる方よろしくお願いします。

  • 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のテキストボック、Exitイベント

    エクセルのVBAで簡単なデータ登録のマクロを作成しています。 フォームのテキストボックスに入力した値を、エクセルシートに展開する程度の機能です。 製品コードを必須にしており、製品コードが入っていない時はエラーメッセージを表示します。 製品コードが入力されていないときは、製品コードのテキストボックスにフォーカスがあたったままにしたく、ネットで調べてExitイベントに以下の処理を作成しました。 Private Sub mySeiCD_Exit(ByVal Cancel As MSForms.ReturnBoolean) Dim myMsgBoxValue As String If Len(mySeiCD.Value) = 0 Then myMsgBoxValue = MsgBox("製品コードは入力必須です。" ,vbOKOnly, "製品コード未入力") Cancel = True End If End Sub 製品コード未入力の際にフォーカスはそのままになりましたが、フォームを閉じることができなくなりました。 閉じるボタンを押しても、Exitイベントにひっかかてしまいます。 当然の動きと思いますが、回避する方法はありませんでしょうか? Exitイベントを使わずに、SetFocus を使った場合は、どうしても、次のテキストボックスにフォーカスが移動してしまいました。 以上、長くなりましたが、よろしくお願い致します。

  • ユーザーフォーム データ消去の時の処理

    環境:Excel2002です ユーザーフォームのテキストボックスの入力チェックをしています Rem**************** Rem TextBox5 Check Rem**************** Private Sub TextBox5_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) If Len(Me.TextBox5.Text) = 0 Then '未入力Check If IsNumeric(Me.TextBox5.Text) = False Then '数値入力Check MsgBox "数値で入力してください", _ vbExclamation, "納品書作成ツール" Me.TextBox5.SetFocus Exit Sub End If MsgBox "入力してください", _ vbExclamation, "納品書作成ツール" Me.TextBox5.SetFocus Exit Sub End If Me.TextBox5.Text = Format(Me.TextBox5.Text, "#,##0") End Sub 入力したデータを消去して Enterキーを押すか、マウスでクリックした時のいずれでも Len(Me.TextBox5.Text) = 0 と認知されて "数値で入力してください"のメッセージが表示されてしまいます このメッセージが出ないようにするにはどうしたらいいのでしょうか ご教示願います

  • Accessでのテキストボックスのv記載方法

    Accessでのvbaを使用したコードの書き方について教えて欲しいです。 vbaを使用したますたメンテナンス(データ管理)のコードをAccessで組んでいるのですがで組んでいるのですがどうも上手くいかないところが多いです。 1. コードという名前のテキストボックス(プロパティ→すべて→名前でつけた名前を使用しています)の入力チェックが上手くいきません。ここでは自作関数を呼び出してif文で空白かどうかチェックしてるのですが コード(テキストボックス)=Nullとなってしまい、""のチェックに引っかかってくれません。どうしたら空白=""になってくれるのでしょうか。 デバッグをしてみたらテキストボックスは常にNull(Variant型)なってるのではなくたまに""(String型)になったりするので何が原因で型が変わってるのかも謎です テキストボックスだから""で空文字判定できると思うのですが… 書いたのは以下のコードです。 わかる方よろしくお願いします。 Public Function EmptyCheck(Koumoku As String) As Boolean '引数で渡された項目が入力されているかチェック If Koumoku = ""Then Koumoku.SetFocus Exit Function EmptyCheck = Ture Else EmptyCheck = False End If End Function Private Sub コード_KeyDown(KeyCode As Integer, Shift As Integer) 'Enterキー押したときに処理を開始する If KeyCode = 13 Then If EmptyCheck(コード) = True Then MsgBox "TextBox &を入力してください。" End If

  • マスタの更新について

    お世話になります。 マスタを登録・更新するプログラムを作成しています。 入力画面には以下の項目を配置しています。  ・商品コード  ・商品名  ・備考 値を格納するデータベースのテーブルのフィールドは以下の通りです。  ・商品コード  ・商品名  ・備考  ・削除フラグ  ・登録日  ・登録者  ・更新日  ・更新者 ※主キーは商品コードです。 別画面でこのマスタ内容を選択してデータを作成しています。その為、現在は整合性を取るために、マスタを更新する時は商品コードを変更できないようにして更新しています。 ここで皆さんに質問があります。 現在のテーブルにはオートナンバー型のようなフィールドを作成していません。 一般的にこのようなマスタを作成する際はオートナンバー型のようなフィールドを作成するものなのでしょうか。またどのように対応するのが望ましいのでしょうか。 くだらない内容で大変申し訳ありませんが宜しくお願いします。 私の説明で皆さんに伝える事ができたか心配ですがどうぞ、アドバイス等をいただけませんでしょうか。 何卒、宜しくお願いします。

  • 更新SQLの書き方

    次のテーブルW、Yがあります。 テーブルYの内容をテーブルWに更新するSQLを教えてください。 カーソル処理はNG、DBはORACLE9です。 よろしくお願いいたします。 更新方法は、 (1)コードAで結合する (2)テーブルYのコードB以上の値を持つ、テーブルWのレコードを更新する (3)テーブルWの更新先項目は、コードBの値に対応した数とする  (例 (1)Y.コードB=11 なら、W.コードB=11~の項目「数11」を更新する    (2)Y.コードB=15 なら、W.コードB=15~の項目「数15」を更新する) 【更新前】 ■テーブルY(更新元) コードA コードB 数 AAA    11    20 AAA    15    26 ■テーブルW(更新先) コードA コードB 日にち 数11 数12 数13 数14 数15 AAA    11    20060703 0 0 0 0 65 AAA    12    20060710 0 0 0 0 65 AAA    13    20060718 0 0 0 0 65 AAA    14    20060724 0 0 0 0 65 AAA    15    20060731 0 0 0 0 0 ↓ ↓ ↓ 【更新後】 テーブルW コードA コードB 日にち 数11 数12 数13 数14 数15 AAA    11    20060703 20 0 0 0 65 AAA    12    20060710 20 0 0 0 65 AAA    13    20060718 20 0 0 0 65 AAA    14    20060724 20 0 0 0 65 AAA    15    20060731 20 0 0 0 26 テーブルY(更新元)を「横持ち」にしておくと楽になるでしょうか? ■テーブルY(更新元) コードA コードB 数11 数12 数13 数14 数15 AAA    11    20 0 0 0 0 AAA    15    0 0 0 0 26

  • VBAに関する質問です!!

    下記のコードで実行すると、「値が大きすぎます。」と出るのはなぜですか? ※得点1にはユーザーフォーム上で3が、大問1には2が入力されており、tokuは8が抽出されている状態です。 ata = 得点1 dai = 大問1 toku = WorksheetFunction.VLookup(級, Sheets("sheet1").Range("I:O"), dai + 2, False) If ata > toku Then MsgBox "値が大きすぎます。" 得点1.SetFocus 'TabIndex最後のコントロールにフォーカスをセット SendKeys "+({TAB})" 'TabIndex 最初の TextBox1 にフォーカスをセット Exit Sub End If お願いします。(>人<;)