いつもお世話になります
Windows7 excell2010 です
ご指導を仰ぎたいのは参照図で言うと、
TextBox1~6 は順調に入力しますがTextBox7にすると「入力」に飛び
参照図のG13に入力されません。
VBAを勉強し始めたはかりですのでどこが悪いかわかりません。
恐れ入りますがご指導願えませんでしょうか。
下記参考にします。
Module のコードには
Sub FormSample()
Do
UserForm1.Show
Loop
End Sub
Sub Test()
MsgBox "ボタンによるマクロの実行"
End Sub
UserForm1
Private Sub CommandButton1_Click()
n = 1
Do
n = n + 1
Loop While Cells(n, 1) <> ""
Cells(n, 1) = UserForm1.TextBox1.Text
Cells(n, 2) = UserForm1.TextBox2.Text
Cells(n, 3) = UserForm1.TextBox3.Text
Cells(n, 4) = UserForm1.TextBox4.Text
Cells(n, 5) = UserForm1.TextBox5.Text
Cells(n, 6) = UserForm1.TextBox6.Text
Cells(n, 7) = UserForm1.TextBox7.Text
Unload Me
End Sub
Private Sub CommandButton2_Click()
Unload Me
End
End Sub
> TextBox1~6 は順調に入力しますがTextBox7にすると「入力」に飛び
おそらく・・としか言いようがありませんが、
「タブインデックス」がコマンドボタンより後にあるのでしょう。
VBE画面でテキストボックスを右クリック⇒プロパティを選択すると、
図のような「プロパティ」という枠が出てきます。
この中の「TabIndex」を確認し、処理したい(フォーカスを置きたい)順番にしてやりましょう。
フォームが開いた時にフォーカスを持つコントロールには「0(ゼロ)」が振られますから、
質問文中の「図」のフォームのままだとすると、テキストボックス7は「7番目にフォーカス」、
よって「6」を設定してやればOKです。
(おそらく今はボタンが「6」、テキストボックス7が「7」に設定されているのでは?)
もう一つの確認点は「TabStop」が「False」になっている可能性です。
これだとまったくフォーカスを持てなくなってしまいますので、「True」にしておいてあげましょう。
以上、質問への(私なりの)回答でした。
以下は蛇足で、質問とは全く関係ないのですが・・
> Module のコードには
> Sub FormSample()
> Do
> UserForm1.Show
> Loop
> End Sub
これ、大丈夫ですか?
このままだと「強制的にマクロを止めない限り」延々とフォームが出続けますが・・・
私なら、YES/NO型のメッセージを出し、「NOなら終了/YESなら繰り返し」
のような感じで作ります。
例えば
Sub FormSample()
UserForm1.Show
If MsgBox("続行しますか?", vbYesNo) = vbNo Then
Exit Sub
Else
FormSample
End If
End Sub
簡単に書くとこんな感じ。
ついでに。
> n = 1
> Do
> n = n + 1
> Loop While Cells(n, 1) <> ""
おそらく、最終行の次の空白行を取りたいんですね。
もちろん、間違えたやり方とは言いません。
が、これが100行・1000行・・と増えてきたときに
どんどんレスポンスが落ちてきます(処理速度が落ちます)。
1行ずつDo~Loopしていく必要があるためです。
(基本的にDo~Loopは遅いです。)
なので、別案。
n = Cells(Rows.Count, 1).End(xlUp).Row + 1
Cells(n, 1) = UserForm1.TextBox1.Text
(以下省略)
これで、最終行の次の行番号を一発で引っ張ってきます。
これだとデータが何行あっても処理は1回ですから、レスポンスも基本的には落ちません。
以上、参考までに。
質問者
お礼
TextBox1 = TabIndex 0
TextBox2 = TabIndex1
という具合に修正したらうまくゆきました。
例えば
Sub FormSample()
UserForm1.Show
If MsgBox("続行しますか?", vbYesNo) = vbNo Then
Exit Sub
Else
FormSample
End If
End Sub
なので、別案。
n = Cells(Rows.Count, 1).End(xlUp).Row + 1
Cells(n, 1) = UserForm1.TextBox1.Text
(以下省略)
も採用させていただきました。
丁寧なご回答をいただき誠にありがとうございます。
お礼
TextBox1 = TabIndex 0 TextBox2 = TabIndex1 という具合に修正したらうまくゆきました。 例えば Sub FormSample() UserForm1.Show If MsgBox("続行しますか?", vbYesNo) = vbNo Then Exit Sub Else FormSample End If End Sub なので、別案。 n = Cells(Rows.Count, 1).End(xlUp).Row + 1 Cells(n, 1) = UserForm1.TextBox1.Text (以下省略) も採用させていただきました。 丁寧なご回答をいただき誠にありがとうございます。