access PR

AccessでTextBox.Valueが取得できない原因と対処(Null・フォーカス・イベント順の落とし穴)

記事内に商品プロモーションを含む場合があります

結論:原因の多くは「Null」「イベントのタイミング」「参照方法」

Accessで

  • TextBox.Value が取れない

  • 空になる

  • 型が一致しません が出る

といった現象が起きる場合、原因のほとんどは次の3つです。

  1. TextBox が Null のまま

  2. イベントのタイミングが早すぎる

  3. 参照方法を勘違いしている

VBA自体の不具合ではなく、
Access特有の仕様を理解していないことが原因です。


よくある症状

  • 値が入力されているのに Value が空

  • フォームを開いた直後に取得すると Null

  • ボタンを押すとエラーになる

  • Debug.Print すると何も表示されない


原因①:TextBox が Null(未入力)

Accessでは、TextBoxが未入力の場合
空文字(“”)ではなく Null になります。

Debug.Print Me!Text0.Value ‘ ← Null

対処:Nz関数で必ずガードする

Dim s As String
s = Nz(Me!Text0.Value, “”)

数値なら:

Dim n As Long
n = CLng(Nz(Me!Text0.Value, 0))

👉 Valueを使う前にNz
これだけでトラブルの大半は防げます。

原因②:イベントのタイミングが早すぎる

Accessでは、
イベントごとにValueの確定タイミングが違います。

よくあるNG例

Private Sub Text0_Change()
Debug.Print Me!Text0.Value
End Sub

Change イベントでは、
入力途中の状態のため、期待通りに取れないことがあります。

おすすめのイベント

  • AfterUpdate:入力確定後

  • LostFocus:フォーカスが外れた後

  • ボタンClick:確実

Private Sub Text0_AfterUpdate()
Debug.Print Me!Text0.Value
End Sub

👉 「いつ値が確定するか」を意識するのが重要です。

原因③:参照方法の勘違い

Accessでは、次の書き方はすべて有効ですが、
混在させると分かりにくくなります。

Me!Text0.Value
Me.Text0.Value
Forms!Form1!Text0.Value

おすすめ

  • 同一フォーム内Me!Text0.Value

  • 他フォーム参照Forms!フォーム名!Text0.Value

👉 曖昧な書き方は避け、
状況に合った参照方法に統一しましょう。

原因④:Enabled / Visible / Locked の影響

TextBoxの状態によっては、
値は見えていても取得に影響が出ることがあります。

確認ポイント

  • Visible = False → 取得できない

  • Enabled = False → 取得はできるが注意

  • Locked = True → 取得は可能

まずは Visible=True で動作確認すると切り分けが楽です。


原因⑤:Value を省略して混乱している

Accessでは Value は省略可能です。

Me!Text0 = “test”

ただし、
初心者〜中級者のうちは 明示的に書く方が安全です。

Me!Text0.Value = “test”

👉 可読性とトラブル回避のためにも
Valueは省略しないのがおすすめです。


安全な取得の基本形(おすすめ)

実務で一番安全なのがこの形です。

Dim v As Variant
v = Nz(Me!Text0.Value, “”)

数値の場合:

Dim n As Long
n = CLng(Nz(Me!Text0.Value, 0))

それでも取得できない時のチェックリスト

  1. TextBoxは Nullではないか

  2. AfterUpdate / Click で取得しているか

  3. 参照方法は正しいか

  4. Visible / Enabled の状態

  5. 型変換前に Nz しているか


まとめ

  • TextBox.Value が取れない原因は Null が最多

  • イベントのタイミングを間違えない

  • 参照方法を統一する

  • Nz + 型変換が基本形

👉 Valueが取れない=Accessの仕様を疑う
👉 VBAの文法ミスではないことがほとんどです。

内部リンク

Accessでよく出る「型が一致しません」エラーの正体

Access VBAでClipboardを扱う最も簡単な方法(64bit対応・API不要)