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

いつもお世話になります
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

「ユーザーフォームVBAでCells(n,」の質問画像

A 回答 (1件)

> 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回ですから、レスポンスも基本的には落ちません。


以上、参考までに。
「ユーザーフォームVBAでCells(n,」の回答画像1
    • good
    • 0
この回答へのお礼

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
  (以下省略)

も採用させていただきました。
丁寧なご回答をいただき誠にありがとうございます。

お礼日時:2013/07/10 17:21

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