プロが教える店舗&オフィスのセキュリティ対策術

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

「ユーザーフォームに入力したデーターが転記」の質問画像

A 回答 (4件)

他人さまへの「補足」に関する回答で恐縮ですが。



「With」の使い方について調べましょう。
全角で書くと

With Worksheets("売上記入")
    n = .Cells(Rows.Count, 1).End(Xlup).Row + 1
    .Cells(n, 2) = Me.TextBox1.Text
   (略)
End With

と言う感じで、Withで省略したところには「.(ピリオド)」が必要です。


詳細はお調べください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/07/15 19:22

前お二人からのご指摘通り、


「どのシートの」該当セルに書いてやるか指定しておかないと、
フォームを走らせたときのアクティブシートに書きに行ってしまいます。
なので例えばユーザーフォーム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列にも値を書きに行くか、どちらかですね。
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/07/15 19:21

次のようにするのがよいでしょう。


売上記入シート上に「開発」タブの「挿入」から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

この回答への補足

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

補足日時:2013/07/13 20:25
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/07/15 19:20

セルへの書き込みですが、ユーザーフォーム内でコーディングしていますので、例えば、



Worksheets("sheet1").Cells~

のようにセルの所在を明記しないとダメだと思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/07/15 19:18

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