- 締切済み
ExcelテキストボックスのTab順番を変更したい。
Excel2003を使用しています。 テキストボックスを複数作成しました。 そのテキストボックスに入力をどんどんしていきたいので、Tabキーを使用したいと思っています。 その際に次のボックスに移動する順番を指定したいのです。 現時点ではTabキーを押していくと、 名前ボックスに「テキスト1」「テキスト3」「テキスト4」「テキスト2」の様に表示され、 順番もバラバラになっています。 何か良い方法はありませんでしょうか。 宜しくお願い致します。
- みんなの回答 (8)
- 専門家の回答
みんなの回答
- myRange
- ベストアンサー率71% (339/472)
またまた登場、myRangeです。 >このキーダウンイベントは、 >1つ1つ入力していくしか方法はありませんでしょうか? >(現在はTextBox[3]の[]の部分を手作業で次々と増やしていってみています) 面倒でもその方法が現時点での質問者にとっては簡単確実な方法だと思われます。 参考までにいうとコピペしないでやる方法を2つほど挙げることができます。 (1)VBAでコードを自動生成する方法 (2)Classを作成し擬似的にTextBoxのコントロール配列を作成する方法 (因みに、どちらのコードも30行程度でできるでしょう) これらの利点としては、TextBoxに増減があってもコードの変更の必要がないことです。 増減があったときは、1回実行すればOK。 例えば、TextBoxを50個追加したとすると、 50個追加した後で1回実行すれば、その50個もtabで飛ぶようになるというこです。 但し、(1)はちょっとした制限があるのでそれを解除する必要があります。 これらはコード的には短いものですが少々VBAの知識を要しますので、 変更があったときに対処できないできない(質問から判断)でしょうから 今の時点では地道にコピペを繰り返した方がベターだと考えます。 以上です。
- nagare
- ベストアンサー率33% (280/831)
IF文を入れ忘れてました Private Sub MoveTab(nTextBoxNo As Integer, ByVal KeyCode As MSForms.ReturnInteger) Dim sTextBoxNo As String Dim arryaTab As Variant If KeyCode <> 9 Then ' TABキーのKeyCode Exit Sub End If arryaTab = Array(4, 3, 1, 2) 'TextBox1 -> TextBox4 'TextBox2 -> TextBox3 'TextBox3 -> TextBox1 'TextBox4 -> TextBox2 sTextBoxNo = "TextBox" & arryaTab(nTextBoxNo - 1) Sheets("Sheet1").OLEObjects(sTextBoxNo).Activate End Sub
- nagare
- ベストアンサー率33% (280/831)
コントロールとイベント関数は1対1なので、コントロールを追加したら、関数も自分で追加しないといけません (VBのコントロール配列がVBAでも使えたらできるのですけどね) 横着関数を作ってみました MoveTab()のarryaTabでTAB順を定義しますので、TAB順番の変更が楽にできます Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) Call MoveTab(1, KeyCode) End Sub Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) Call MoveTab(2, KeyCode) End Sub Private Sub TextBox3_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) Call MoveTab(3, KeyCode) End Sub Private Sub TextBox4_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) Call MoveTab(4, KeyCode) End Sub Private Sub MoveTab(nTextBoxNo As Integer, ByVal KeyCode As MSForms.ReturnInteger) Dim sTextBoxNo As String Dim arryaTab As Variant arryaTab = Array(4, 3, 1, 2) 'TextBox1 -> TextBox4 'TextBox2 -> TextBox3 'TextBox3 -> TextBox1 'TextBox4 -> TextBox2 sTextBoxNo = "TextBox" & arryaTab(nTextBoxNo - 1) Sheets("Sheet1").OLEObjects(sTextBoxNo).Activate End Sub
- nagare
- ベストアンサー率33% (280/831)
myRangeさん 感謝です(目から鱗) オートシェイプのテキストボックスに気づきませんでした オートシェイプのイベント制御はできそうですけど、難度が高いです http://www.vbalab.net/vbaqa/data/excel/log/tree_342.htm TextBoxコントロールに変更するか、オートシェイプのテキストボックスをタグ順になるように貼りなおす かですね。。。 ★混乱させてすみません
- myRange
- ベストアンサー率71% (339/472)
回答者のnagareさんへ、、、 質問の文言に >名前ボックスに「テキスト1」「テキスト3」、、、様に表示され とありますから、質問者のいうテキストボックスは、 図形ツールバーからの「テキストボックス」ではないでしょうか。 ●質問者のテキストボックスでは質問の件はできませんねので どうしてもというなら、nagareさんのTextBoxを使ってください。 「コントロールツールボックス」ツールバーにあるTextBoxコントロールです。 以上です。
- nagare
- ベストアンサー率33% (280/831)
VBA自体が動かないのでしょうか? ・マクロのセキュリティ レベル セキュリティ レベル を[中]にする必要があります http://g.www.ms.akadns.net/japan/office/ork/2003/seven/ch23/SecA02.htm ・コードの確認 VBAのデザインモードで、Excel上のTextBox1をWクリックしてください VBAエディタがTextBox1_KeyDownを開けばOKです 開かなければ、コピペする場所を間違えてます ★わからない用語を使っていましたらすみません
- nagare
- ベストアンサー率33% (280/831)
Forms.TextBox.1の方でしたか(解答したのはUserFormでのやり方でした) キーダウンイベントでやるしかないようです こんな感じです Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = 9 Then ' TABキーのKeyCode TextBox2.Activate End If End Sub
補足
何度もスミマセン。 しかも本当に初歩的な話になってしまうと思うのですが、、、 書いて下さったキーダウンイベントを実行してみたいのですが、 方法が分からなくて… お時間のある時で良いので教えて頂けないでしょうか。 一応、書いて頂いた Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = 9 Then ' TABキーのKeyCode TextBox2.Activate End If End Sub をVBを開いて実行させたいSheetのコードにコピペしてみたのですが、 上書き保存して再度開いてみても変わりありませんでした。 やはり方法が間違っているのでしょうか。 宜しくお願い致します。
- nagare
- ベストアンサー率33% (280/831)
TabIndexプロパティで設定します 設定値は0から順番に設定します 今回の場合だと 「テキスト1」←0 「テキスト2」←1 「テキスト3」←2 「テキスト4」←3 ★TabStopプロパティがTrueであること 補足:TabIndexプロパティの値は必ず「ユニーク」になりますので、同じ値を設定すると、自動でずれますので注意してください
補足
早速のご回答ありがとうございました! TabIndexとの事ですが、これはVBでという事でしょうか? テキストボックスは普通にExcelの画面で作成しているのですが、 それでも設定できますかね?? 初歩的な質問で申し訳ないのですがどうぞ宜しくお願い致します。
補足
nagare様 myRange様 本当にありがとうございました!!! だいぶ理解が出来、Tabキーで移動する事ができました! 本当に申し訳ないんですが、 最後に1つだけ質問させて下さい。 このキーダウンイベントは、 1つ1つ入力していくしか方法はありませんでしょうか? (現在はTextBox[3]の[]の部分を手作業で次々と増やしていってみています)