#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'sWareのワンポイトテクニカルアドバイスをご利用ください。3000円/件〜でご支援します。
スタンドアロンからSQL Server対応まで、オーダーメイドのシステムを短納期・安価でお届けします


Copyright © T'sWare All rights reserved