• 締切済み

ユーザーフォームに入力したデーターが転記できない

いつもお世話になります。 Windows7 excell2010 です。 いろんなものに勉強してここまでに作成したユーザーフォームですが、データーは入力できるのですがコマンドボタンをクリックしても各セルに反映されません。 色々と試行錯誤していますがうまくゆきません。 どこに不具合があるかわからず恐れ入りますがどなたかご指導いただけませんか。 参考にコードは参考に下記にします。 ユーザフォームのVBAは下記です コード ※Module1 Sub 売上() Do UserForm1.Show Loop End Sub Sub 入金() Do UserForm2.Show Loop End Sub ※UserForm1 Private Sub UserForm_Initialize() With ComboBox1 .AddItem "1" .AddItem "2" .AddItem "3" End With End Sub Private Sub CommandButton1_Click() n = Cells(Rows.Count, 1).End(xlUp).Row + 1 Cells(n, 2) = UserForm1.TextBox1.Text Cells(n, 3) = UserForm1.TextBox2.Text Cells(n, 4) = UserForm1.TextBox3.Text Cells(n, 11) = UserForm1.ComboBox1.Text Unload Me End Sub Private Sub CommandButton2_Click() Unload Me End End Sub ※UserForm2 Private Sub CommandButton1_Click() n = Cells(Rows.Count, 1).End(xlUp).Row + 1 Cells(n, 2) = UserForm2.TextBox1.Text Cells(n, 3) = UserForm2.TextBox2.Text Cells(n, 4) = UserForm2.TextBox3.Text Unload Me End Sub Private Sub CommandButton2_Click() Unload Me End End Sub

みんなの回答

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.4

他人さまへの「補足」に関する回答で恐縮ですが。 「With」の使い方について調べましょう。 全角で書くと With Worksheets("売上記入")     n = .Cells(Rows.Count, 1).End(Xlup).Row + 1     .Cells(n, 2) = Me.TextBox1.Text    (略) End With と言う感じで、Withで省略したところには「.(ピリオド)」が必要です。 詳細はお調べください。

dorasuke
質問者

お礼

みなさんのアドバイスをいただきながら再度原点に返り調べなおしたりしてやっと今になって解決しました。 有難うございました。 少しずつですが上に向かっていますがまたまだです。 今後とも皆さんにはお世話になりますがよろしくお願いします。

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.3

前お二人からのご指摘通り、 「どのシートの」該当セルに書いてやるか指定しておかないと、 フォームを走らせたときのアクティブシートに書きに行ってしまいます。 なので例えばユーザーフォーム1から「売上記入」シートに書きに行くなら Private Sub CommandButton1_Click() With Worksheets("売上記入")     n = .Cells(Rows.Count, 1).End(xlUp).Row + 1     .Cells(n, 2) = Me.TextBox1.Text     .Cells(n, 3) = Me.TextBox2.Text     .Cells(n, 4) = Me.TextBox3.Text     .Cells(n, 11) = Me.ComboBox1.Text End With Unload Me End Sub こんな感じ。 ただし、売上記入シートのA列には式が入っているのでしょうか? もともと入っているなら特に問題はありませんが、 これが入っていないのであれば   n = Cells(Rows.Count, 1).End(xlUp).Row + 1 これはちょっと問題があります。 この式だと「1列目(A列)についての最終行を見に行きますから、 いつまで経っても新規行に行けません。 なので、B列=2行目で最終行を判断するように   n = Cells(Rows.Count, 2).End(xlUp).Row + 1 としてやる方が無難です。 あるいは、書き込みに行くコードの中に   .Cells(n, 1) = Month(Me.TextBox1.Text) とでも追加してA列にも値を書きに行くか、どちらかですね。

dorasuke
質問者

お礼

みなさんのアドバイスをいただきながら再度原点に返り調べなおしたりしてやっと今になって解決しました。 有難うございました。 少しずつですが上に向かっていますがまたまだです。 今後とも皆さんにはお世話になりますがよろしくお願いします。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

次のようにするのがよいでしょう。 売上記入シート上に「開発」タブの「挿入」からActiveXコントロールからコマンドボタンをクリックしてシート上にコマンドボタンを配置します。そのコマンドボタンを右クリックして「コードの表示」から次のコードを入力しkます。 Private Sub CommandButton1_Click() UserForm1.Show End Sub その画面で「挿入」から「ユーザーフォーム」を選択します。 最初のケースではUserform1の画面が表示されますのでそこにCombox1を描き、また、テストボックス1,2,3を配置します。 またCommandButtonを配置します。 ユーザーフォーム上で右クリックして「コードの表示」を選んでから、その画面には次のコードを入力します。 Private Sub UserForm_Initialize() With UserForm1.ComboBox1 .AddItem "1" .AddItem "2" .AddItem "3" End With End Sub Private Sub CommandButton1_Click() With Worksheets("Sheet1") n = .Cells(Rows.Count, 1).End(xlUp).Row + 1 .Cells(n, 2) = UserForm1.TextBox1.Text .Cells(n, 3) = UserForm1.TextBox2.Text .Cells(n, 4) = UserForm1.TextBox3.Text .Cells(n, 11) = UserForm1.ComboBox1.Text End With Unload Me End Sub 同様に入金記入シート上でも同じ操作を行ってシート上にコマンドボタン、ユーザーフォーム2を作成します。 ユーザーフォーム2ではコンポボックスを配置する必要はないので次のようなコードになりますね。 Private Sub CommandButton1_Click() With Worksheets("Sheet2") n = .Cells(Rows.Count, 1).End(xlUp).Row + 1 .Cells(n, 2) = UserForm1.TextBox1.Text .Cells(n, 3) = UserForm1.TextBox2.Text .Cells(n, 4) = UserForm1.TextBox3.Text End With Unload Me End Sub

dorasuke
質問者

お礼

みなさんのアドバイスをいただきながら再度原点に返り調べなおしたりしてやっと今になって解決しました。 有難うございました。 少しずつですが上に向かっていますがまたまだです。 今後とも皆さんにはお世話になりますがよろしくお願いします。

dorasuke
質問者

補足

UserForm1 / 2 をご指導いただき下記のように修正してテストしましたところ、 「実行時エラー’9’ インデックスが有効範囲にありません」の表示が出ました。 少し調べましたがよくわかりませんでした。 誠に申し訳ありませんが再度ご指導願えないでしょうか。 よろしくお願いします。 修正後のマクロで下記にします。 ※Mojule1 Sub 売上記入() Do UserForm1.Show Loop End Sub Sub 入金記入() Do UserForm2.Show Loop End Sub ※UserForm1 Private Sub UserForm_Initialize() With UserForm1.ComboBox1 .AddItem "1" .AddItem "2" .AddItem "3" End With End Sub Private Sub CommandButton1_Click() With Worksheets("売上記入") n = Cells(Rows.Count, 1).End(xlUp).Row + 1 Cells(n, 2) = UserForm1.TextBox1.Text Cells(n, 3) = UserForm1.TextBox2.Text Cells(n, 4) = UserForm1.TextBox3.Text Cells(n, 11) = UserForm1.ComboBox1.Text End With Unload Me End Sub Private Sub CommandButton2_Click() Unload Me End End Sub ※UserForm2 Private Sub CommandButton1_Click() With Worksheets("入金記入") n = Cells(Rows.Count, 1).End(xlUp).Row + 1 Cells(n, 2) = UserForm2.TextBox1.Text Cells(n, 3) = UserForm2.TextBox2.Text Cells(n, 4) = UserForm2.TextBox3.Text End With Unload Me End Sub Private Sub CommandButton2_Click() Unload Me End End Sub

  • MSZ006
  • ベストアンサー率38% (390/1011)
回答No.1

セルへの書き込みですが、ユーザーフォーム内でコーディングしていますので、例えば、 Worksheets("sheet1").Cells~ のようにセルの所在を明記しないとダメだと思います。

dorasuke
質問者

お礼

みなさんのアドバイスをいただきながら再度原点に返り調べなおしたりしてやっと今になって解決しました。 有難うございました。 少しずつですが上に向かっていますがまたまだです。 今後とも皆さんにはお世話になりますがよろしくお願いします。

関連するQ&A