Excel VBA質問箱 IV

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

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


7679 / 13646 ツリー ←次へ | 前へ→

【37532】UserFormを使いやすくするには Nori 06/5/10(水) 19:26 質問[未読]
【37536】Re:UserFormを使いやすくするには kobasan 06/5/10(水) 21:33 発言[未読]
【37538】Re:UserFormを使いやすくするには Nori 06/5/10(水) 22:36 質問[未読]
【37540】Re:UserFormを使いやすくするには neptune 06/5/10(水) 23:07 回答[未読]
【37541】Re:UserFormを使いやすくするには kobasan 06/5/10(水) 23:36 発言[未読]
【37542】Re:UserFormを使いやすくするには Kein 06/5/11(木) 0:55 回答[未読]
【37543】Re:UserFormを使いやすくするには Nori 06/5/11(木) 6:31 お礼[未読]
【37545】Re:UserFormを使いやすくするには Kein 06/5/11(木) 12:09 発言[未読]
【37565】Re:UserFormを使いやすくするには Nori 06/5/11(木) 23:16 お礼[未読]

【37532】UserFormを使いやすくするには
質問  Nori  - 06/5/10(水) 19:26 -

引用なし
パスワード
   ユーザフォームを使いデータをエクセルの表に転記しています。
テキストボックスを4個使用していますが、4データを入力後
エクセルの表に転記させるとき、EnterKeyを使用していますが、
3回叩かないと、転記できません。コマンドボタンですと1回で済みますが。
コードに問題があるかと思いますが、チェックいただければ
幸いなのですが、お願いします。

Private Sub CommandButton1_Click()

  If TextBox1.Value = "" Or TextBox2.Value = "" _
  Or TextBox3.Value = "" Or TextBox4.Value = "" Then
   MsgBox "入力に空きがあります"
  Else
   With Cells(65536, 1).End(xlUp).Offset(1, 0)
     .Value = TextBox1.Value
     .Offset(, 1).Value = TextBox2.Value
     .Offset(, 2).Value = TextBox3.Value
     .Offset(, 3).Value = TextBox4.Value
   End With

   TextBox1.Value = ""
   TextBox2.Value = ""
   TextBox3.Value = ""
   TextBox4.Value = ""
   TextBox1.SetFocus
  
  End If
End Sub

【37536】Re:UserFormを使いやすくするには
発言  kobasan  - 06/5/10(水) 21:33 -

引用なし
パスワード
   今晩は

コードにエラーは無いですが、何をチェックしてほしいのですか。
上手く動いてないのなら、どんな現象なのですか?


>ユーザフォームを使いデータをエクセルの表に転記しています。
>テキストボックスを4個使用していますが、4データを入力後
>エクセルの表に転記させるとき、EnterKeyを使用していますが、
>3回叩かないと、転記できません。コマンドボタンですと1回で済みますが。
>コードに問題があるかと思いますが、チェックいただければ
>幸いなのですが、お願いします。
>
>Private Sub CommandButton1_Click()
>
>  If TextBox1.Value = "" Or TextBox2.Value = "" _
>  Or TextBox3.Value = "" Or TextBox4.Value = "" Then
>   MsgBox "入力に空きがあります"
>  Else
>   With Cells(65536, 1).End(xlUp).Offset(1, 0)
>     .Value = TextBox1.Value
>     .Offset(, 1).Value = TextBox2.Value
>     .Offset(, 2).Value = TextBox3.Value
>     .Offset(, 3).Value = TextBox4.Value
>   End With
>
>   TextBox1.Value = ""
>   TextBox2.Value = ""
>   TextBox3.Value = ""
>   TextBox4.Value = ""
>   TextBox1.SetFocus
>  
>  End If
>End Sub

【37538】Re:UserFormを使いやすくするには
質問  Nori  - 06/5/10(水) 22:36 -

引用なし
パスワード
   ▼kobasan さん:

今晩は。

>コードにエラーは無いですが、何をチェックしてほしいのですか。
>上手く動いてないのなら、どんな現象なのですか?
>

テキストボックスの4個のデータを入力後
エクセルの表に転記させるとき、EnterKeyを使用していますが、
EnterKeyを3回叩かないと、転記できません。
一回叩くだけで転記するようなコードにすることが
出来るとありがたいのですが。

【37540】Re:UserFormを使いやすくするには
回答  neptune  - 06/5/10(水) 23:07 -

引用なし
パスワード
   ▼Nori さん:

>テキストボックスの4個のデータを入力後
>エクセルの表に転記させるとき、EnterKeyを使用していますが、
>EnterKeyを3回叩かないと、転記できません。
>一回叩くだけで転記するようなコードにすることが
>出来るとありがたいのですが。
UPされているコードで大丈夫みたいですが?
いずれにしてもテストをするのはNori さんですから、私には
このソースでは文法には間違いが無いらしいとしかわかりません。

コンパイルはとおるんでしょう?

ちなみにEnterKeyで入力というのはWindowsの仕様にはそわないと思いますよ。
まぁ正常に動けば問題ないですが。

【37541】Re:UserFormを使いやすくするには
発言  kobasan  - 06/5/10(水) 23:36 -

引用なし
パスワード
   ▼Nori さん:
>▼kobasan さん:
>
>今晩は。
>
>>コードにエラーは無いですが、何をチェックしてほしいのですか。
>>上手く動いてないのなら、どんな現象なのですか?
>>
>
>テキストボックスの4個のデータを入力後
>エクセルの表に転記させるとき、EnterKeyを使用していますが、
>EnterKeyを3回叩かないと、転記できません。
>一回叩くだけで転記するようなコードにすることが
>出来るとありがたいのですが。

最初の質問で
>コマンドボタンですと1回で済みますが。
とありますが、コマンドボタンを使わないで、テキストボックス4個でやりたいということでしょうか ?

【37542】Re:UserFormを使いやすくするには
回答  Kein  - 06/5/11(木) 0:55 -

引用なし
パスワード
   いろいろテストしてみましたが、こんな感じがベストのように思います。
入力漏れがあったときは、そのテキストボックスへ入力した後、Enterを
数回押さないと転記されないという不満が残りますが、そこまて解消
したければ、TextBox4以外の全てのテキストボックスの Changeイベント
などで、全ボックスの値をチェックするようなマクロが必要になります。

Private Sub CommandButton1_Click()
  Dim i As Integer
  Dim Uf As UserForm

  Set Uf = UserForms(0)
  For i = 1 To 4
   If Uf.Controls("TextBox" & i).Text = "" Then
     MsgBox "TextBox" & i & " が入力されていません", 48
     Exit Sub
   End If
  Next i
  With Sheets("Sheet1").Cells(65536, 1).End(xlUp)
   For i = 1 To 4
     .Offset(1, i - 1).Value = _
     Uf.Controls("TextBox" & i).Text
     Uf.Controls("TextBox" & i).Text = ""
   Next i
  End With
  Uf.TextBox1.SetFocus: Set Uf = Nothing
End Sub

Private Sub TextBox4_AfterUpdate()
  Set Uf = UserForms(0)
  With Uf
   If .TextBox1.Text = "" And _
   .TextBox2.Text = "" And _
   .TextBox3.Text = "" And _
   .TextBox4.Text = "" Then
     Set Uf = Nothing: Exit Sub
   End If
  End With
  For i = 1 To 4
   If Uf.Controls("TextBox" & i).Text = "" Then
     MsgBox "TextBox" & i & " が入力されていません", 48
     Exit Sub
   End If
  Next i
  With Sheets("Sheet1").Cells(65536, 1).End(xlUp)
   For i = 1 To 4
     .Offset(1, i - 1).Value = _
     Uf.Controls("TextBox" & i).Text
     Uf.Controls("TextBox" & i).Text = ""
   Next i
  End With
  Uf.TextBox1.SetFocus: Set Uf = Nothing
End Sub

【37543】Re:UserFormを使いやすくするには
お礼  Nori  - 06/5/11(木) 6:31 -

引用なし
パスワード
   ▼皆様 大変ありがとう御座いました。
 質問の仕方が的を得ていないようで、ご迷惑をおかけしました。 

 Kein さんには、色々とテストまでしていただき、感謝しています。
 実は、この操作がやりたかったのです。
 いつも入力をEnterKeyを使っているもんですから、本当に作業が楽に
 なります。
 3回のキータッチが1回で済み、作業時間がぐんっと上がります。
 早速今日から、このコードに置き換えて進める予定です。
 ありがとう御座いました。
  
>いろいろテストしてみましたが、こんな感じがベストのように思います。
>入力漏れがあったときは、そのテキストボックスへ入力した後、Enterを
>数回押さないと転記されないという不満が残りますが、そこまて解消
>したければ、TextBox4以外の全てのテキストボックスの Changeイベント
>などで、全ボックスの値をチェックするようなマクロが必要になります。

 はい、入力漏れは殆ど発生していませんので、このコードを活用させて
 頂きます。
 今後ともよろしくご指導の程お願いします。

【37545】Re:UserFormを使いやすくするには
発言  Kein  - 06/5/11(木) 12:09 -

引用なし
パスワード
   ちょっと訂正。
>Private Sub TextBox4_AfterUpdate()
>  Set Uf = UserForms(0)

Private Sub TextBox4_AfterUpdate()
  Dim Uf As UserForm

  Set Uf = UserForms(0) '又は UserForm1

と、追加して下さい。すいませんでした。

【37565】Re:UserFormを使いやすくするには
お礼  Nori  - 06/5/11(木) 23:16 -

引用なし
パスワード
   ▼Kein さん:

最後までしていただき、更に丁寧に訂正まで頂き
ありがとう御座います。

既に今日から順調に動き出しました。
本当に素晴らしく、快適に使わせて頂いています。
ありがとう御座いました。

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