プロが教えるわが家の防犯対策術!

ACCESSのコンボボックスに「012/015/028/125」等が設定されているて、
コンボボックスのプロパティの「入力チェック」は「はい」の設定になっております。
そういった場合、「12」と入力した場合、「012」とすることは可能でしょうか?

テキストボックスの場合には、そのテキストボックスの更新後処理で
Me.コード = Format(Me.コード, "000")
のように記述し変更していたのですが・・・。
コンボボックスでは、「指定した値はリストにありません」と表示され、更新後処理がが実行されません。

A 回答 (3件)

以下のようにしてみてください。



If Me!コンボ0.ListIndex = -1 Then
  MsgBox ("リストにデータはありません")
  Me!コンボ0 = Null
  Me!他のコントロール名.SetFocus
  Me!コンボ0.SetFocus
  Exit Sub
End If

一旦、他のコントロールにフォーカスを
移し、再度もとのコンボボックスにフォーカスを
設定します。他のテキストボックスでもかまいません。
    • good
    • 0
この回答へのお礼

ありがとうございます。
できました。

お礼日時:2014/07/03 09:26

>ですが、上記のように書いても、フォーカスだけは


>次のコントロールに移動してしまいます。

コンボボックスに数値が存在すればコンボボックスに
フォーカスを固定する必要はないので、とくにそのような
処置をほどこしてはいませんが。

コンボボックスに数値が存在しなければ、

If Me!コンボ0.ListIndex = -1 Then
  MsgBox ("リストにデータはありません")
  Me!コンボ0 = Null
  Me!コンボ0.SetFocus
  Exit Sub
End If

のようにコンボボックスに入力した数値を
ご破算にして、フォーカスをコンボボックスに
置いて再入力を促すためのコードになっています。

この回答への補足

ありがとうございます。
入力値に間違えがあれば、piroin654の言う通り、フォーカスをコンボボックスに戻したいのですが、上記のように記述しても、メッセージが表示された後、次のタブ移動順であるコントロールにフォーカスが移動してしまいます。
それは何が原因なのでしょうか。

補足日時:2014/07/02 15:51
    • good
    • 0

「入力チェック」を「はい」にした場合、更新後処理では


システムのエラーメッセージを阻止できないので、「入力チェック」
を「いいえ」にして、

更新後処理で、

Private Sub コンボ0_AfterUpdate()
Me!コンボ0 = Format(Me!コンボ0, "000")
If Me!コンボ0.ListIndex = -1 Then
  MsgBox ("リストにデータはありません")
  Me!コンボ0 = Null
  Me!コンボ0.SetFocus
  Exit Sub
End If
End Sub

のようにするのが一番手っ取り早いのでは?
ListIndexについては調べて確認してみてください。
    • good
    • 0
この回答へのお礼

ありがとうございます。
思う通りの動作ができました。
ですが、上記のように書いても、フォーカスだけは
次のコントロールに移動してしまいます。

お礼日時:2014/07/02 09:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!