Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


12560 / 13644 ツリー ←次へ | 前へ→

【9862】ユーザーフォーム上のフォーカス移動について EMU 03/12/19(金) 15:17 質問
【9863】Re:ユーザーフォーム上のフォーカス移動につ... INA 03/12/19(金) 15:23 回答
【9881】Re:ユーザーフォーム上のフォーカス移動につ... EMU 03/12/19(金) 17:21 質問
【9882】Re:ユーザーフォーム上のフォーカス移動に... INA 03/12/19(金) 17:27 回答
【9902】Re:ユーザーフォーム上のフォーカス移動に... EMU 03/12/20(土) 16:23 質問
【9871】Re:ユーザーフォーム上のフォーカス移動につ... つん 03/12/19(金) 15:41 発言
【9884】Re:ユーザーフォーム上のフォーカス移動につ... EMU 03/12/19(金) 17:33 質問
【9903】Re:ユーザーフォーム上のフォーカス移動につ... EMU 03/12/20(土) 16:26 お礼
【9906】Re:ユーザーフォーム上のフォーカス移動につ... INA 03/12/20(土) 16:43 回答
【9907】Re:ユーザーフォーム上のフォーカス移動につ... EMU 03/12/20(土) 16:52 質問
【9912】Re:ユーザーフォーム上のフォーカス移動につ... INA 03/12/20(土) 23:09 回答
【9914】Re:ユーザーフォーム上のフォーカス移動につ... EMU 03/12/21(日) 12:50 お礼

【9862】ユーザーフォーム上のフォーカス移動につ...
質問  EMU  - 03/12/19(金) 15:17 -

引用なし
パスワード
   皆様始めまして。
最近VBAをいじり始めた初心者のEMU申します。
わからないことがあり、インターネットで検索をかけたら
この掲示板を見つけました。
ぶしつけながら質問させてください。

ユーザーフォームにはバグが多いということがかかれてあったので
その類なのかなとも思いますが
フォーカスの移動が矢印キーを使うとうまく出来ないのです。
TABキーを押下してフォーカスを動かす分には、こちらの意図するように
動いてくれるのですが。
こういった事象は一般的なものなのでしょうか?
矢印キーに関するプロパティもあるのですか?
(もう少し具体的に書きたいのですが、図をかくわけにもいかないので
いったんこのまま投稿します)

初めての書き込みでいたら無いところもあろうかと思いますが、
ご教授お願い致します

【9863】Re:ユーザーフォーム上のフォーカス移動に...
回答  INA  - 03/12/19(金) 15:23 -

引用なし
パスワード
   どのように上手く行かないのでしょうか?

タブオーダー や tabindex の設定は、どうなっていますか?

【9871】Re:ユーザーフォーム上のフォーカス移動に...
発言  つん E-MAIL  - 03/12/19(金) 15:41 -

引用なし
パスワード
   EMU さん、こんにちは
INAさん、横から失礼します。

>フォーカスの移動が矢印キーを使うとうまく出来ないのです。
>TABキーを押下してフォーカスを動かす分には、こちらの意図するように
>動いてくれるのですが。

私は、確実にこうです、とはよー言いませんが、
矢印キーでの移動は、コードで書いてやらなくてはいけないかと思います。
(試したところタテに並んだテキストボックスなどでは、上下の矢印キーで動いたけど)

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

  If KeyCode = vbKeyRight Then
    TextBox4.SetFocus
  End If

End Sub

こんな感じかな?
いーーーっぱい書かなくてはいけなくて面倒そうだけど(^^;

【9881】Re:ユーザーフォーム上のフォーカス移動に...
質問  EMU  - 03/12/19(金) 17:21 -

引用なし
パスワード
   ▼INAさん早速のご返事ありがとうございます。
 まさか,こんなに早く返えってくるとは思いもよらなかったので
 感動しています。にもかかわらず返信が遅くなり申し訳ありません。

>どのように上手く行かないのでしょうか?
>タブオーダー や tabindex の設定は、どうなっていますか?

タブオーダで見たところ
順番はこちらの設定したとおりになっておりました。

具体的には

検索(TextBox)
行(TextBox)
列(TextBox)
置換(TextBox)
以下略(括弧は私が説明のため付け足しました)

とあります
それで
フォーム上には下記のように張ってあります

検索 □□□□□□□□□ 
行  □□□ 列 □□□ 
置換 □□□□□□□□□

□はTextBoxで 漢字部分はlabelです
Tabの移動では 検索>置換>行>列 と動いてくれるのですが
矢印キーだと 検索>列>置換 のように移動してはくれますが
どうしても 行 にフォーカスが移りません。
ご教授お願い致します。
(このあと会議のためおそらく返信は明日になってしまいますが、申し訳ありません)

【9882】Re:ユーザーフォーム上のフォーカス移動に...
回答  INA  - 03/12/19(金) 17:27 -

引用なし
パスワード
   通常、矢印は上から下に移動するだけなので、
つんさんの書かれたように各コントロールのKeyDownイベントで
どのキーが押されたか判別させます。

Private Sub 列TextBox_KeyDown _
(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

Select Case KeyCode.Value
Case 37 '左
  行TextBox.SetFocus
Case 38 '上
  検索TextBox.SetFocus
Case 39 '右
  'なし
Case 40 '下
  置換TextBox.SetFocus
End Select

End Sub

【9884】Re:ユーザーフォーム上のフォーカス移動に...
質問  EMU  - 03/12/19(金) 17:33 -

引用なし
パスワード
   ▼つんさん返信ありがとうございます。コードまで書いていただき恐縮しております。

>私は、確実にこうです、とはよー言いませんが、
>矢印キーでの移動は、コードで書いてやらなくてはいけないかと思います。
>(試したところタテに並んだテキストボックスなどでは、上下の矢印キーで動いたけど)

私の最初の説明がいたらずもうしわけありませんでした。
私の問題の詳細は9881のほうに書いておきましたので、そちらを見ていただけると
ありがたいです。

>Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
>
>  If KeyCode = vbKeyRight Then
>    TextBox4.SetFocus
>  End If
>
>End Sub
>
>こんな感じかな?
>いーーーっぱい書かなくてはいけなくて面倒そうだけど(^^;

確かにこの方法ならば全部に指定すればうまくいけました。
ありがとうございます。
ですが、おっしゃるとおりいっぱい書かなくてはいけないのが
厳しいなと。
(コントロールごとに上下左右設定するのもさることながら
フォーム上の配置が換わったときに対応が大変そうなので)

あと、どうして正確に動いてくれなかったのが気になります。
よろしかったら、そこらへんをご教授してもらえませんか?

【9902】Re:ユーザーフォーム上のフォーカス移動に...
質問  EMU  - 03/12/20(土) 16:23 -

引用なし
パスワード
   ▼INAさん返信が遅れ申し訳ありませんでした。
 教えていただいたコードをためさせていただきました。

>通常、矢印は上から下に移動するだけなので、
>つんさんの書かれたように各コントロールのKeyDownイベントで
>どのキーが押されたか判別させます。
>

なるほど、そういったわけで左右の移動ができなかったわけですね。

>Private Sub 列TextBox_KeyDown _
>(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
>
>Select Case KeyCode.Value
>Case 37 '左
>  行TextBox.SetFocus
>Case 38 '上
>  検索TextBox.SetFocus
>Case 39 '右
>  'なし
>Case 40 '下
>  置換TextBox.SetFocus
>End Select
>
>End Sub

この方法だと、矢印キーを押した時にフォーカスが移ってしまうのですが
入力の訂正をしたい時に矢印キーを使いたいときはどうすればいいでしょうか?

たとえば
列のテキストボックスで
「あああああ」
とうちこんで
「あああいあ」
となおしたいときに
左矢印を押したら行テキストボックスに行かないように制御したいのです。
ご教授をよろしくお願いいたします。

【9903】Re:ユーザーフォーム上のフォーカス移動に...
お礼  EMU  - 03/12/20(土) 16:26 -

引用なし
パスワード
   つんさん、上で質問しましたが
入れ替わりのINAさんの記事で、
矢印キーでうまく制御できないのは
通常上下しか対応していない
というご指摘を頂き納得いたしました。

お忙しいところをお教えいただきありがとうございます。
またよろしければ教えてください。

【9906】Re:ユーザーフォーム上のフォーカス移動に...
回答  INA  - 03/12/20(土) 16:43 -

引用なし
パスワード
   >この方法だと、矢印キーを押した時にフォーカスが移ってしまうのですが
>入力の訂正をしたい時に矢印キーを使いたいときはどうすればいいでしょうか?

別のコントロールに移動するときと、
入力の訂正したいときの条件は何でしょうか?
それによって、IF文で条件分岐すればよいと思います。

【9907】Re:ユーザーフォーム上のフォーカス移動に...
質問  EMU  - 03/12/20(土) 16:52 -

引用なし
パスワード
   ▼INAさんへ

>別のコントロールに移動するときと、
>入力の訂正したいときの条件は何でしょうか?
>それによって、IF文で条件分岐すればよいと思います。

「あああああ」
の先頭文字で左矢印キーが押されたときのみ
左へフォーカスを移したいのですが
どう記述していいかわかりません。

すいませんが、ご教授をおねがいいたします。

【9912】Re:ユーザーフォーム上のフォーカス移動に...
回答  INA  - 03/12/20(土) 23:09 -

引用なし
パスワード
   SelStart プロパティで、選択されている文字列の先頭位置を
調べることが出来ます。

Private Sub TextBox1_KeyDown _
(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

Select Case KeyCode.Value
Case 37 '左
  
  If TextBox1.SelStart = 0 Then
    TextBox2.SetFocus
  End If
  
End Select

End Sub

【9914】Re:ユーザーフォーム上のフォーカス移動に...
お礼  EMU  - 03/12/21(日) 12:50 -

引用なし
パスワード
   ▼INAさんたびたびコードを考えていただきありがとうございます。
>Private Sub TextBox1_KeyDown _
>(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
>
>Select Case KeyCode.Value
>Case 37 '左
>  
>  If TextBox1.SelStart = 0 Then
>    TextBox2.SetFocus
>  End If
>  
>End Select
>
>End Sub

上記のコードでうまくいきました。
大変勉強になり助かりました。今後もご迷惑をおかけするとおもいますが
よろしくお願いします。

12560 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free