• ベストアンサー

Excelマクロ、フォーム入力での矢印移動禁止

データをユーザーフォームで入力するマクロを作りましたが、 項目の移動をするとき矢印キーだとcomboboxの中身が入れ替わってしまうので、矢印キーでの移動を禁止してリターンキーとタブキーでの移動にしたいんですが、やり方がわかりません。 どうすればいいのでしょうか?ご伝授ください。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 とりあえず、ComboBox の中で、↓(下向き矢印キー)が、最後でフォーカスを移動しないようにするには、このようにすると出来ます。 '------------------------------------------------------------ Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)  If KeyCode = 40 And ComboBox1.ListIndex > ComboBox1.ListCount - 2 Then   KeyCode = 0   End If End Sub '------------------------------------------------------------ これは、↓(下向き矢印キー)の効力が、ListIndex の最後になると通らない、ということです。 KenKen_SPさんへ 今、ちょうど、KenKen_SPさんのヘルプが欲しいと思っていたところです。 >「一番最後」とはどういうことでしょうか? 私から言わせていただくと、これは直接関係がなくて、↓(下向き矢印キー)では、フォーカスを移動させない、ということに他ならないのですね。 今回は間に合わせなのですが、コードを見ていただければ、私の発想はお分かりなるかと思います。ご質問者の内容は、本来は、ComboBox の中の時だけ、↓(下向き矢印キー)が使えればよい、ということだと思うのです。そうすると、ComboBox をフォーカスした時だけ、矢印キーを Enable にするというようなコードを示せればよいのではないかと思いました。しかし、今の私のスキルもさることながら、今のPCでは、いろんな事情があって、試すことが出来ません。(失敗すると、当分、ここに戻れなくなる可能性が強いです。(^^;)

Letsler
質問者

お礼

できました!!ほぼ希望どおりのうごきです!!! ついでにif文中に KeyCode = 38 And ComboBox1.ListIndex < 1 の条件を入れて上矢印も通らなくすることができました。 データのフォーム入力したかったのですが項目が多すぎて Excel既定のフォームでは入力することができず、 自作せざるを得ませんでした。 すごく助かりました。ありがとうございました。

その他の回答 (3)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

> カーソルでフォーカスが移動してしまいます。 > 一番最後まで行けば、コントロールのフォーカスは移動します 「一番最後」とはどういうことでしょうか?

Letsler
質問者

お礼

ANo.2、ANO.4さんのソースで解決しました。 ちょっと消化不良かもしれませんが急ぎなものでこれで失礼します。 ありがとうございました。

Letsler
質問者

補足

お礼の欄間違えました。 ANo.1,ANo.4さんでした。すみませんでした。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 >項目の移動をするとき矢印キーだとcomboboxの中身が入れ替わってしまうので、 一番最後まで行けば、コントロールのフォーカスは移動しますが、その前に、使い方になれたほうがよいのではないでしょうか?かなりイレギュラーな設定で、返って混乱しかねないと思います。 >リターンキーとタブキーでの移動にしたい 標準的に、タブストップを置いてあれば、移動するはずです。 以下のようにすれば、[↓]矢印キーで、ComboBox の内容が移動しないようには出来ますが、さて、どんなものでしょうか?私の勇み足かもしれませんが。 Private Sub ComboBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, _   ByVal Shift As Integer)  Dim i As Long  i = ComboBox1.ListIndex  If KeyCode = 40 Then   ComboBox1.ListIndex = i - 1  End If End Sub

Letsler
質問者

お礼

ありがとうございます。助かります。 希望する動きとしてはまったく逆になります。 ComboBoxの中だけで矢印キーを有効にし、 フォーカス移動では無効にしたいのです。 タブとリターンでのフォーカス移動はできていますので、 矢印キーでのフォーカス移動だけを無効にしたいんですが・・・。

Letsler
質問者

補足

>一番最後まで行けば、コントロールのフォーカスは移動しますが、 これに困っています。 ここでフォーカスの移動をさせたくないんです。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.1

こんにちは。KenKen_SP です。 > 項目の移動をするとき矢印キーだとcomboboxの中身が入れ替わって > しまうので、矢印キーでの移動を禁止してリターンキーとタブキー > での移動にしたい... ご質問文において「項目の移動」とは、どのようなことでしょうか? もう少し詳しく補足願います。 「項目の移動」について下記の2つが推測できます。 ・コントロールのフォーカスを他コントロールに移動させること  フォーカスを移すコードを特に書いてなければ、キー操作だと  カーソル(矢印)キーでは移動できないと思います。 ・ComboBox コントロール内の選択項目の移動  「ComboBox コントロールの値を変更させたくない」ということ  なのでしょうか?

Letsler
質問者

お礼

>フーカスを移すコードを特に書いてなければ 書いていないつもりです。が、 カーソルでフォーカスが移動してしまいます。

Letsler
質問者

補足

ありがとうございます、感激です。 困ったとき相談できる人がいるのはとても助かります。 >「項目の移動」について 前者のフォーカスを他コントロールに移動させること、になります ComboBoxに限らず、フォーム内のフォーカスの移動を 矢印キーの使用を禁止(無効に?)して 矢印キーはComboBoxコントロール内だけで有効にしたいのです