プロが教える店舗&オフィスのセキュリティ対策術

VBAのフォームでテキストボックス(1)~テキストボックス(5)
まで作ったとします。
カーソルの移動はtabindexの値を順番につければいいのですが、例えばENTERキーとTABキーを両方押したときは
カーソルが一つ飛ぶ制御をしたいのですがどうすればいいでしょうか?

つまり
カーソルがテキストボックス(1)にいる状態でENTERキーとTABキーを同時に押せばカーソルがテキストボックス(3)に移動するようにしたいのですが、お願いします

A 回答 (3件)

こんにちは。

maruru01です。

[Tab]+[Enter]は無理ですが、[Ctrl]+[Enter]は拾えます。
[Ctrl]+[Enter]は、文字コード10(ラインフィード)の入力に対応しています。
それを、KeyPressイベントで拾えばいいわけです。


Private Sub テキストボックス1_KeyPress(KeyAscii As Integer)

  If KeyAscii = 10 Then
    テキストボックス3.SetFocus
  End If

End Sub


ちなみにAccessの場合、テキストボックス中の改行を、[Ctrl]+[Enter]で行っていますので、上記のコードを書くとテキストボックス内での改行が出来なくなります。
また、[Ctrl]+アルファベットキーで、文字コード1~26の入力になります。([Ctrl]+[n]で文字コード14)
したがって、上記コードの「10」を変更することで、この[Ctrl]+アルファベットキーをショートカットのように使うことが出来ます。
なお、この場合、最初からメニューに割り当てられているもの([Ctrl]+[c]でコピーなど)は避けて下さい。
    • good
    • 0

TABやEnterにこだわっていないと言うのなら。


メニューを使うのが手っ取り早いでしょうね。
メニューエディタでメニュー項目を作成し、そのメニューへのショートカットとしてCtrl+Aとします。
次にそのメニューのClickイベントでフォーカスを移動させてあげればいいです。
メニューを表示したくなければメニューエディタで表示のチェックをはずせば表示されません。

この様なコーディングになります。

Private idx As Integer
Private Sub Form_Load()
idx = 1
End Sub

Private Sub MN_CTRLA_Click()
idx = idx + 2
If idx > 5 Then idx = 1
Text1(idx).SetFocus
End Sub
    • good
    • 0

残念ですが無理でしょう。


TABとEnterキーは同時に押したとしてもわずかな時間差で別々に機能してしまいます。
Shift+Enterなどで可能かというとそれも無理で、Windowsでキーに対する機能が決められています。

この回答への補足

別にボタンにこだわってないのですが、
できればカーソルを移動させる事がしたいです
。ボタンは何でもいいです。
例えば↓キー押したときカーソルをスキップしたい場合とか やはり無理ですかね?

補足日時:2003/01/29 01:12
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A