[三流君] −−> [VBAで楽しく] −−> [バックナンバー一覧]
−−> No.056 Access Form TextBoxの.SelLength .SelStartプロパティ

Access Form TextBoxの.SelLength .SelStartプロパティ

メルマガ発行内容

<Access Form TextBoxの.SelLength .SelStartプロパティ>

こんにちは、三流プログラマーKen3です。 今回は、 Access のテキストボックスの .SelLength (選択文字数) .SelStart (選択開始位置) です。

/* * 1.今回のキッカケ */

下記の質問をBBS( http://www.ken3.org/cgi-bin/bbs/vba/wforum.cgi )で貰いました >おなまえ:MachineUser >タイトル:キャンセル処理後の選択 > >AccessでのVBAでフォーム上にあるテキストボックスの中身のチェックを >BeforeUpdateイベントにて行っているのですが、間違った値を入力したと >きにキャンセル処理をさせています。 >このキャンセル処理をさせた後、入力文字列を選択状態にしたいのですが、 >どのようにすればよろしいのでしょうか? ---- と質問がありました。

/* * 2._BeforeUpdateで処理をキャンセルする */

まずは、ノーマルなキャンセル処理を書きます。 更新前のイベント処理 頭文字がA,X,Z 番号が100〜999をチェック データはA-201,X-777,Z-234などの形式 *入力禁則でできそうってのは、置いといて、
Private Sub 依頼表No1_BeforeUpdate(Cancel As Integer)

    Dim ErrFLG   As Boolean
    Dim nCHKNO   As Long
    Dim strKUBUN As String

    strKUBUN = Left(Me![依頼表No1], 1)   'チェックする頭文字の代入
    nCHKNO = Val(Mid(Me![依頼表No1], 3)) '番号を変換
    ErrFLG = False  'フラグにFalseを初期代入

    '頭文字のチェック
    If strKUBUN <> "A" And strKUBUN <> "X" And strKUBUN <> "Z" Then
       ErrFLG = True 'ERRをONにする
    End If
       
    'コード範囲のチェック
    If nCHKNO < 100 Or 999 < nCHKNO Then '100より下、999より上か?
       ErrFLG = True 'ERRをONにする
    End If
    
    'エラーの判断
    If ErrFLG = True Then
        MsgBox "データはA-201,X-777,Z-234などの形式で入力してね", vbExclamation, "エラー"
        Cancel = True
    End If

End Sub
と単純に、データをチェック、エラーならCancel = Trueとしました。 [No.60 Cancel=Trueの使い方(例題:Excel 右クリック禁止)] http://www.ken3.org/backno/backno_vba13.html#60 で、Cancel=Trueの使い方を少し書きました。 今回みたいに更新前にデータをチェックして、更新をキャンセルすることもできます。 Cancel=Trueはいろいろと使えるので、覚えて置いてください

/* * 3.SelLength、SelStart、SelText プロパティ */

そこまでは出来てるんだよ、 質問されたのは、このエラーの時、 >入力文字列を選択状態にしたい だろ、、、と一流読者のお叱りを受けたところで、 そろそろマウスでドラッグした時のみたいな反転イメージを作りたいと思います。 テキストボックスのプロパティを探ると、 Me![依頼表No1]. とピリオドを打ちこむと、プロパティ・メソッドの一覧が表示されます。 ここから使えそうなプロパティを見てみると(それにしてもいっぱい在るよね) SelLength、SelStart、SelText プロパティが見つかりました ヘルプを見ると、 SelLength コントロールで選択されている文字数を示します。 SelStart 選択されたテキストの先頭、またはテキストが選択されていない場合は、   カーソルの位置を示します。 SelText プロパティは、選択されたテキストの文字列を示します。 コイツを使って、エラー処理の時、勝手に文字を選択します。 'エラーの判断 If ErrFLG = True Then Me![依頼表No1].SelStart = 0 '先頭から Me![依頼表No1].SelLength = Len(Me![依頼表No1]) '文字数分選択する MsgBox "データはA-201,X-777,Z-234などの形式で入力してね", vbExclamation, "エラー" Cancel = True End If と、エラーの時、 .SelStart = 0 で先頭から .SelLength = Len(Me![依頼表No1]) で文字数分反転選択させます -- 余談 -- 今回はSelTextは使わなかったけど選択された一部を見たい時などに使ってみてね。 プロパティ、メソッドの探り方 http://www.ken3.org/vba/excel-help.html こっちもヨロシク

/* * 4.蛇足の回答 */

.SelStart = 0 先頭から .SelLength = Len(Me![依頼表No1]) 全部 だとツマラナイので間違った場所を選ぶコードを書いてみます。 オイオイ、せっかくキレイに終わったと思ったのに、 余計な蛇足の回答すると失敗するぞ(笑) まぁ、蛇足も必要ってことで(謎)もう少しお付き合いください。 (※読者の声:長くなるだけだろ?) エラーのチェック場所が2ヶ所なので、エラーの位置別に選択位置を変えてみます。 '更新前のイベント処理 '頭文字がA,X,Z 番号が100〜999をチェック 'データはA-201,X-777,Z-234などの形式
Private Sub 依頼表No1_BeforeUpdate(Cancel As Integer)

    Dim nCHKNO   As Long
    Dim strKUBUN As String

    strKUBUN = Left(Me![依頼表No1], 1)   'チェックする頭文字の代入
    nCHKNO = Val(Mid(Me![依頼表No1], 3)) '番号を変換

    '頭文字のチェック
    If strKUBUN <> "A" And strKUBUN <> "X" And strKUBUN <> "Z" Then
        Me![依頼表No1].SelStart = 0   '先頭から
        Me![依頼表No1].SelLength = 1  '間違いは頭文字なので
        MsgBox "頭文字はA,X,Z です", vbExclamation, "頭文字エラー"
        Cancel = True 'キャンセルをセットして
        Exit Sub      '関数を途中で抜ける
    End If
       
    'コード範囲のチェック
    If nCHKNO < 100 Or 999 < nCHKNO Then '100より下、999より上か?
        Me![依頼表No1].SelStart = 2   '数値のエリア開始位置
        Me![依頼表No1].SelLength = 99 '文字数をオーバーしてセットしてみたら?
        MsgBox "コードは100〜999までです", vbExclamation, "コード範囲エラー"
        Cancel = True 'キャンセルをセットして
        Exit Sub      '関数を途中で抜ける
    End If

End Sub
頭文字のチェックでは If strKUBUN <> "A" And strKUBUN <> "X" And strKUBUN <> "Z" Then Me![依頼表No1].SelStart = 0 '先頭から Me![依頼表No1].SelLength = 1 '間違いは頭文字なので と1文字目を選択させてから MsgBox "頭文字はA,X,Z です", vbExclamation, "頭文字エラー" メッセージ表示 Cancel = True 'キャンセルをセットして Exit Sub '関数を途中で抜ける 処理のキャンセルをセットしてから関数を抜けてます End If コード範囲のチェックでは、 If nCHKNO < 100 Or 999 < nCHKNO Then '100より下、999より上か? Me![依頼表No1].SelStart = 2 '数値のエリア開始位置 Me![依頼表No1].SelLength = 99 '文字数をオーバーしてセットしてみたら? とコードの入力開始位置2(012の3文字目)から、 オヤ?99文字指定?これでも動くんだぁ。 ※正確な文字数じゃなくても大丈夫でした MsgBox "コードは100〜999までです", vbExclamation, "コード範囲エラー" Cancel = True 'キャンセルをセットして Exit Sub '関数を途中で抜ける 処理のキャンセルをセットしてから関数を抜けてます End If いろいろとみなさんも遊んでみてください。

/* * 5.おわりの挨拶 */

今回は、 BeforeUpdateイベントでエラー時、文字列を選択したい でした。 拾い読みして、 1つでも何かの参考となれば幸いです。 Excel/Access大好き、三流プログラマーKen3でした。 ---------------------------------- 関連項目(ただのバックナンバー紹介) ---------------------------------- [No.60 Cancel=Trueの使い方(例題:Excel 右クリック禁止)] http://www.ken3.org/backno/backno_vba13.html#60 で、Cancel=Trueの使い方を少し書きました。 今回みたいに更新前にデータをチェックして、更新をキャンセルすることもできます。 プロパティ、メソッドの探り方 http://www.ken3.org/vba/excel-help.html こっちもヨロシク

フィードバック

VBA系の→[掲示板]←を覗く、質問を書き込む

評価・感想

No.065を読んだ満足度(評価)は?
5満足(参考になった)
4まぁまぁ(一部参考になった)
3普通(どちらとも言えない)
2なんかなぁ(期待と違った)
1不満(読んで損した気分)
作者に感想・質問を送る場合は下記に気軽に書いてください
あなたのお名前(ニックネーム) さん

作者からの返信は、 不用 E-mail で受信したい
*質問・感想はメルマガで紹介する場合があります

ページフッター(リンクや広告など)


[三流君(TOP ken3.org へ戻る)]
-- [VBA系TOPへ]
---- [VBA系バックナンバー目次へ移動]
------ [VBAでIEを操作 CreateObject("InternetExplorer.application")]・・・実は当店一番人気、VBAでIEを操作するサンプルです
------ [VBAでOutlookの操作 CreateObject("Outlook.Application")]・・・Outlookを使い、メール関係の処理です
------ [Access から Excel 連携 CreateObject("Excel.Application")]・・・人気のAccessからExcelへデータ書き出しなどです
------ [AccessのUserForm/サブフォームを操作]・・・アクセスでフォームを使ったサンプルです
------ [Accessのレポートを操作]・・・レポートを操作してみました
------ [Access クエリー関係やその他関数]・・・あまりまとまってませんが、スポット的な単体関数の解説です
------ [Excel UserForm(ユーザーフォーム)を操作する]・・・エクセルでユーザーフォームを作成して入力などを行ってます
------ [ExcelからAccessを操作する]・・・ExcelからAccessのマクロを起動してみました、
------ [Excel関係 関数、その他]・・・その他Excel関係です
------ [VBAでテキストファイル(*.txt,*.html,*.csv)の操作]・・・テキストファイルを使ったサンプルです
------ [VBA 標準関数関係とその他解説]・・・その他、グダグタ解説してます


広告
-- [通販系の売れ筋広告へ] ←主に楽天やAmazonのランキングです
blog
-- [三流君の作業日記] ← 日々の作業を少々
-- [通販あしあと] ← 通販ページの足跡を一覧で羅列

情報を探す

情報を探すならGoogleかな?

↓Web全体、サポート情報(support.microsoft.com)や三流君VBA(ken3.org)から検索する
Google
Web www.ken3.org
www.microsoft.com support.microsoft.com

あとは、項目別にMSでお勉強かな?
◆ マイクロソフト サイトの歩き方
◇ How-To インデックス
◇ FAQ インデックス
◇ スキルレベル別おすすめコンテンツ
◇ テクノロジ マップ
◇ テーマ別技術資料一覧

書籍の購入

Webだけじゃさすがに勉強しきれないので、プログラミング関係の書籍も読んでみては??

コンピュータ書籍の発送がハヤイ専門店

コンピュータの本・専門店
種類が豊富で探し易いです。※在庫ありが48時間以内発送が急ぎで資料や書籍がほしい時、とても助かります。
お奨め本の目次を見るだけでも勉強になったり

amazon.co.jpでキーワード別チェック

下記、私が設定したキーワードですが、こんな感じで資料や書籍を探ってみては?
[VBA全体を把握する] -- やはり全体をさらっと見たいですよね。
[SQL関連でDB力UP] -- システムはデータベース設計が重要
[ADO接続を探る] -- VBAなのでADO接続を押さえておく
[Windows APIを探る] -- さらにAPIになて知ってれば強力だ!
[.NETを探る] -- と言っても時代は.NETに流れてるし
プログラミング以外でも知りたいことは多くって、
[人間関係] -- で、客先・上司、まわりに気を使い。
[プログラマーの自己啓発] -- プログラムだけじゃなくいろいろと向上したいよ
[コーチング・育成] -- 先輩になったら後輩(部下)の面倒をみてね。
そんなこんなでプログラマーっていろいろと大変なんだってば・・・