Access 非連結ボックスの入力確認して、元に戻す。

簡単そうでなかなかできなかった案件。

Me.Undoをすれば戻にもどるとか、Me.テキストボックス.valuedefault すれば戻るとかあったけどできない。

結局スマートではないだろうが、下記の方法で切り抜けた。

(1)フォームにダミーの記憶するためのテキストボックスを準備
(2)対象の非連結テキストボックスにフォーカスが当たったら、ダミーのテキストボックスに値を退避
Private Sub input_MNO_GotFocus()
MNOD = input_MNO
End Sub

(3)
Private Sub input_MNO_AfterUpdate()

If MNOD = 0 Then

If MsgBox(“WCから他社に変更するとWCマスタデータも同時に削除されます。”, vbYesNo, “WC変更確認”) = vbYes Then

If DCount(“*”, “dbo_mst_maker”, “[MNO]=[input_MNO]”) = 0 Then
MsgBox “そのメーカー番号は存在しません。”
input_MNO = MNOD
Me.input_メーカー名 = DLookup(“メーカー名”, “dbo_mst_maker”, “MNO=” & Me.MNOD)
Me.input_メーカー名.SetFocus
Me.input_MNO.SetFocus
Else

Me.input_メーカー名 = DLookup(“メーカー名”, “dbo_mst_maker”, “MNO=” & Me.input_MNO)

End If
Else
input_MNO = MNOD  ※0以外でNOでキャンセルした時は、戻に戻すをやっている。
Exit Sub
End If

Else

If DCount(“*”, “dbo_mst_maker”, “[MNO]=[input_MNO]”) = 0 Then
MsgBox “そのメーカー番号は存在しません。”
input_MNO = Null
input_メーカー名 = Null
Me.input_メーカー名.SetFocus
Me.input_MNO.SetFocus
Else

Me.input_メーカー名 = DLookup(“メーカー名”, “dbo_mst_maker”, “MNO=” & Me.input_MNO)

End If
End If
On Error Resume Next

End Sub

Access フォーカスが移動できない

レコードセットを使った処理ののち、コントロールを移動させようと頑張ったが、行方不明になり、テキストボックスをクリックしないとカーソルが戻ってこない。自動で移動させたいのだができなかった。
調べてやっとできた。
このような情報がAccessの開発には必要なんですよね。

レコードセットをつかったVBAが書かれているとする。  
Set Me.Recordset = rs

rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing
DoCmd.ShowAllRecords ※これの前に入れてしまうとコントロールは移動できない。

#####ここ以下にいれることで移動できるようになった######
If IsNull(call_受注番号) Then
受注番号検索 = Null
Me.Visible = False  ※これが必要
Me.Visible = True  ※これが必要
Me.受注番号検索.SetFocus
Else
受注番号検索 = Null
Me.Visible = False
Me.Visible = True
Me.input_納品日入力.SetFocus ※これでやっとコントロールが移動できた。
End If

Null と ”” は違うようなのでで、注意してください。

Access テキストボックスのロック

入力ミスを防ぐためと、データの不一致をさせないために、あるタイミングで、テキストボックスに編集ロックをかけたい時がある。その方法。

Sub Form_Current()
If Me.[社員ID] = “0001” Then
Me.[旅費明細].Enabled = True  ※テキストボックス変化なし。
Me.[旅費明細].Locked = False  ※ロックを外す
Else
Me.[旅費明細].Enabled = False ※テキストボックスグレーになり、フォーカス移動できない。
Me.[旅費明細].Locked = True  ※ロックをする。
End If
End Sub

EnableとLockedはセットで使用しなくてもOK
編集だけできないようにさせる場合は、LockedだけでOKである。

Access 複数条件にてホーム入力

複数条件から抽出して、フォームに入力するために、Dlookupでは、うまくいかなかったのでレコードセットをつかった入力をしましたが、
Me.input_数量.SetFocus
をしても、フォーカスが行方不明になってカーソルが移動しないという不具合から下記のような内容にして終結しました。

Private Sub input_品名コード_AfterUpdate()
Me.input_型式 = DLookup(“型式”, “dbo_mst_parts”, “MNO=” & Me!input_MNO & ” AND [品名コード]='” & Me.input_品名コード & “‘”)
Me.input_HNO = DLookup(“HNO”, “dbo_mst_parts”, “MNO=” & Me!input_MNO & ” AND [品名コード]='” & Me.input_品名コード & “‘”)
Me.input_単価 = DLookup(“単価”, “dbo_mst_parts”, “MNO=” & Me!input_MNO & ” AND [品名コード]='” & Me.input_品名コード & “‘”)

Me.input_数量.SetFocus
End Sub

Access 再入力時にフォーカスが戻ってこない。

Private Sub input_MNO_AfterUpdate()

Me.call_メーカー名 = DLookup(“メーカー名”, “dbo_mst_maker”, “MNO=” & Me.input_MNO)

If IsNull(call_メーカー名) Then
MsgBox (“条件に一致するメーカーは存在しません。”)

Me.call_メーカー名.SetFocus 
※これを入れないと、フォーカスはinput_MNOにとどまっているので、どうしても次のテキストボックスに行ったきり戻ってこない。いったん、あえて、別テキストボックスに移動させて、戻している。

Me.input_MNO.SetFocus
input_MNO = Null
End If

End Sub