度重なる質問で恐縮ですが宜しく御願い致します。
エクセルからフォームを呼び出し、入力してOKボタン(Commandbutton1)を押すとsheet2にデータを書き込むようにしました。さらに再度フォームを開いた時に、前回OKを押してsheet2に書き込んだデータがフォーム上に入力済みになっているようにしました。再度フォームを開いた時に前回のデータが入力済みで開く事は開くのですが、逆にsheet2のデータを全削除したあとに開いても、記述が残った状態でフォームに表示されてます。つまり、sheet2のセルをformが開く時に読み込んでないと言うことです。メモリか何かでしょうか?以下に書き込む時のコードと、開く時のコードを記載させていただきます。
ご教授いただければと思います。解りにくければ補足させていただきます。宜しくお願いします。
'Formの記入をSheet2に反映する
Private Sub CommandButton1_Click()
Dim i As Integer
With Worksheets("data")
'「申込書」の値を書き出し
For i = 1 To 21
.Range("A" & i) = UserForm1.Controls("t" & i).Value
Next(・・・続く)
'Formを呼び出したとき、Sheet2から読み込む
Private Sub UserForm1_Initialize()
Dim i As Integer
With Worksheets("data")
'「申込書」の値を読み込み
For i = 1 To 21
UserForm1.Controls("t" & i).Value = .Range("A" & i)
Next(・・・続く)
UserForm1を開く時は、単に
UserForm1.Show
と記述されているのでしょうか?もしそうならば、開くときは、
Load UserForm1
UserForm1.Show
とし、閉じる時は
Userform1.Hide
Unload Userform1
とすれば、UserForm1をメモリにロード→開く→(処理)→閉じる→メモリからUserForm1をアンロードと言う流れになるので、メモリ上に残っているのが原因だとしたら、これで解消できるハズです。
それでもだめなら、
Private Sub UserForm1_Initialize()
Dim i As Integer
'オブジェクトの初期化
For i = 1 To 21
UserForm1.Controls("t" & i).Value = ""
Next
'「申込書」の値を読み込み
For i = 1 To 21
UserForm1.Controls("t" & i).Value = .Range("A" & i)
Next(・・・続く)
で大丈夫だと思います。
お礼
ありがとうございました! 凄くたすかりました!