#740 末尾または全体がスペースの文字列をそのまま反映させるには? フォーム、VBA

テキストボックスに文字列データをキー入力した際、単一または複数ケ連続したスペース(空白)については、Accessの特性として次のように処理されます。
  • 文字列の末尾にあるスペースは除去される
           例)”ABCD△△” → ”ABCD”

  • スペースしか入力されていない場合はすべて除去されNULL値となる
           例)”△△△△” → NULL

その動きを確認するため、次のようなフォームを作ってみました。「商品名の文字数」を表示するテキストボックス(赤い部分)の”コントロールソース”プロパティは『=Len(Nz([商品名]))』という式になっており、「商品名」テキストボックスに入力された文字数が表示されるようになっています。
  1. 商品名を編集する前の初期状態 → 文字数は「9」

  2. 商品名の最後にスペースをいくつか入力する

  3. Enterキーを押す → 文字数は「9」のままです


これを回避して、キー入力されたスペースも入力データの一部としてそのまま反映させるには、そのテキストボックスの「AfterUpdate/更新後処理」イベントプロシージャを次のようにします。

Private Sub 商品名_AfterUpdate()
'商品名テキストボックスの更新後処理

  With Me!商品名
    .Value = .Text
  End With

End Sub

テキストボックスの「Text」プロパティには”編集途中の値”が格納されており、そこにはスペースも含まれています。
一方、ふつうの処理(上記のようなコードなし)の場合、「Text」プロパティにはスペースが含まれていても、Enterキーを押したときにそれが確定して「Value」プロパティに代入されたときにはスペースは除去されてしまいます。
Textプロパティ=”ABCD△△” → Valueプロパティ=”ABCD”

そこで上記のコードでは、「Value」プロパティの値が確定したあと、それを強制的にスペースの入った「Text」プロパティ値に置き換えています。
Step1:
   Textプロパティ=”ABCD△△” → Valueプロパティ=”ABCD”
Step2:
   Valueプロパティ=Textプロパティで代入 → Valueプロパティ=”ABCD△△”


このイベントプロシージャを使って上記と同じ操作を行ってみます。
  1. 商品名を編集する前の初期状態 → 文字数は「9」

  2. 商品名の最後にスペースをいくつか入力する

  3. Enterキーを押す
    文字数は「18」になっており、入力データにスペースが反映されていることが分かります。

  4. 今度はスペースだけをいくつか入力する

  5. Enterキーを押す → 文字数は「0」ではなく「10」になっています。
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved