アプリ版:「スタンプのみでお礼する」機能のリリースについて

Excel2003を使用しています。

テキストボックスを複数作成しました。
そのテキストボックスに入力をどんどんしていきたいので、Tabキーを使用したいと思っています。
その際に次のボックスに移動する順番を指定したいのです。

現時点ではTabキーを押していくと、
名前ボックスに「テキスト1」「テキスト3」「テキスト4」「テキスト2」の様に表示され、
順番もバラバラになっています。

何か良い方法はありませんでしょうか。
宜しくお願い致します。

A 回答 (8件)

またまた登場、myRangeです。



>このキーダウンイベントは、
>1つ1つ入力していくしか方法はありませんでしょうか?
>(現在はTextBox[3]の[]の部分を手作業で次々と増やしていってみています)

面倒でもその方法が現時点での質問者にとっては簡単確実な方法だと思われます。

参考までにいうとコピペしないでやる方法を2つほど挙げることができます。

(1)VBAでコードを自動生成する方法
(2)Classを作成し擬似的にTextBoxのコントロール配列を作成する方法
(因みに、どちらのコードも30行程度でできるでしょう)

これらの利点としては、TextBoxに増減があってもコードの変更の必要がないことです。
増減があったときは、1回実行すればOK。
例えば、TextBoxを50個追加したとすると、
50個追加した後で1回実行すれば、その50個もtabで飛ぶようになるというこです。

但し、(1)はちょっとした制限があるのでそれを解除する必要があります。

これらはコード的には短いものですが少々VBAの知識を要しますので、
変更があったときに対処できないできない(質問から判断)でしょうから
今の時点では地道にコピペを繰り返した方がベターだと考えます。
以上です。
 
    • good
    • 0

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
    • good
    • 0

コントロールとイベント関数は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
    • good
    • 1

myRangeさん 感謝です(目から鱗)


オートシェイプのテキストボックスに気づきませんでした

オートシェイプのイベント制御はできそうですけど、難度が高いです
http://www.vbalab.net/vbaqa/data/excel/log/tree_ …

TextBoxコントロールに変更するか、オートシェイプのテキストボックスをタグ順になるように貼りなおす

かですね。。。
★混乱させてすみません

この回答への補足

nagare様
myRange様
本当にありがとうございました!!!
だいぶ理解が出来、Tabキーで移動する事ができました!

本当に申し訳ないんですが、
最後に1つだけ質問させて下さい。

このキーダウンイベントは、
1つ1つ入力していくしか方法はありませんでしょうか?
(現在はTextBox[3]の[]の部分を手作業で次々と増やしていってみています)

補足日時:2010/02/05 15:32
    • good
    • 0

回答者のnagareさんへ、、、



質問の文言に

>名前ボックスに「テキスト1」「テキスト3」、、、様に表示され

とありますから、質問者のいうテキストボックスは、
図形ツールバーからの「テキストボックス」ではないでしょうか。

●質問者のテキストボックスでは質問の件はできませんねので
どうしてもというなら、nagareさんのTextBoxを使ってください。

「コントロールツールボックス」ツールバーにあるTextBoxコントロールです。

以上です。
 
    • good
    • 0

VBA自体が動かないのでしょうか?



・マクロのセキュリティ レベル
 セキュリティ レベル を[中]にする必要があります
http://g.www.ms.akadns.net/japan/office/ork/2003 …

・コードの確認
 VBAのデザインモードで、Excel上のTextBox1をWクリックしてください
 VBAエディタがTextBox1_KeyDownを開けばOKです
 開かなければ、コピペする場所を間違えてます

★わからない用語を使っていましたらすみません
    • good
    • 0

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のコードにコピペしてみたのですが、
上書き保存して再度開いてみても変わりありませんでした。
やはり方法が間違っているのでしょうか。

宜しくお願い致します。

補足日時:2010/02/04 16:28
    • good
    • 0

TabIndexプロパティで設定します


設定値は0から順番に設定します
今回の場合だと
「テキスト1」←0
「テキスト2」←1
「テキスト3」←2
「テキスト4」←3
★TabStopプロパティがTrueであること

補足:TabIndexプロパティの値は必ず「ユニーク」になりますので、同じ値を設定すると、自動でずれますので注意してください

この回答への補足

早速のご回答ありがとうございました!
TabIndexとの事ですが、これはVBでという事でしょうか?
テキストボックスは普通にExcelの画面で作成しているのですが、
それでも設定できますかね??
初歩的な質問で申し訳ないのですがどうぞ宜しくお願い致します。

補足日時:2010/02/04 14:29
    • good
    • 1

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