Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
  • ベストアンサー

VBAのフォーム カーソル移動

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

質問者が選んだベストアンサー

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.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]でコピーなど)は避けて下さい。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • kmor
  • ベストアンサー率27% (225/825)
回答No.2

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

すると、全ての回答が全文表示されます。
  • kmor
  • ベストアンサー率27% (225/825)
回答No.1

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

jones0901
質問者

補足

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

すると、全ての回答が全文表示されます。

関連するQ&A