Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(その他 : Access 2021)
Escキーで画面を閉じる時に入力した値を消したくない
投稿日時: 23/05/01 21:27:49
投稿者: 滝沢

帳票フォームがあります。
このフォームを開く時に同時にレコードを1行追加して、そこに値を手入力しフォームを閉じるという業務があります。
閉じる時、closeを割り当てているコマンドボタンをクリックする分には問題ありません。
この閉じるボタンにEscキーを割り当てているんですが、Escキーを押すと閉じる時に
同時にせっかく入力した値が消えてしまいます。
一回別のレコードに移動すれば消えないんですが、1レコードしかない場合もありその場合は移動ができません。
Escへの割り当てを「閉じるボタンにsetfocus」→「閉じるボタンクリック」にしてみましたがダメです。
なにか良い手はありませんでしょうか。
 
よろしくお願い致します。

回答
投稿日時: 23/05/01 22:05:47
投稿者: hatena
投稿者のウェブサイトに移動

EscキーにはUndo(入力取消)が割り当てられているのでそうなりますね。
 
このフォームではこの規定の動作を停止させたいて、フォームを閉じる動作にしたいのなら、キークリック時イベントでEscキー入力を補足して動作を変更することになりますね。
 

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyEscape Then 'Escキーが押されたら
        KeyCode = 0 'キー入力をキャンセル
        DoCmd.Close 'フォームを閉じる
    End If
End Sub

回答
投稿日時: 23/05/02 10:03:33
投稿者: Suzu

他のアプリケーションや、PCの操作に慣れた人であれば、入力の取り消し にESC を使う事も多いです。
そんな中で、ESCキーに 閉じるを割り当てる事はお勧めできません。
 
 

引用:
帳票フォームがあります。
このフォームを開く時に同時にレコードを1行追加して、そこに値を手入力しフォームを閉じるという業務があります。

 
1レコード のみの追加操作で帳票フォームですか?
 
単票であれば、最後のコントロールを入力し終えた後(EnterやTabキーを押した後)に 移動するのが
Close ボタンになる様に 画面所のコントロール位置、タブオーターを調整し
Close ボタンにフォーカスが当たり、Enter で閉じる方が 楽だと思いますよ。
 
他のレコードを参照しながら入力しなければならず、
帳票フォームが必要だと言うなら、最終コントロールの確定時の処理を 特定キーの時は
Closeボタンにフォーカスが移動する様にする方が良いと思います。

投稿日時: 23/05/02 15:47:44
投稿者: 滝沢

hatena様
コメントありがとうございます。
教えていただいた方法で無事動作しました。
「KeyCode = 0」は、ファンクションキーの割り当て時には入れていましたが意味をわかっていませんでした。
勉強になりました。
ありがとうございます。
 
Suzu様
コメントありがとうございます。
説明が分かりづらかったと思いますが、1レコード追加したら画面を閉じて
また前の画面から値を引っ張ってきて当該フォームにレコードを追加して、
を繰り返して最終的には複数レコードになるフォームです。
なので、1個目の処理の時が1レコードのみになってしまいます。
 
>他のアプリケーションや、PCの操作に慣れた人であれば、入力の取り消し にESC を使う事も多いです。
>そんな中で、ESCキーに 閉じるを割り当てる事はお勧めできません。
確かにそうですね。
以前社内でメインで使用していたシステムが「Esc=閉じる」だったため
社内的にはそれに慣れてる人が多いため、むしろEsc意外に閉じるを割り当てると不評でして。
本件でも最初は「F1キー」に割り当てたんですが、みんなに嫌がられたので
今回のご質問に至った、という経緯があります。
 
ありがとうございます。