|
おはようございます。
>USEFORM内のXボタンで閉じてしまうと入力データが全て
>消されてしまいます。なんとかなりませんか?
かみちゃんさんが仰っているように
>ComboBoxなどUserForm上に配置されているコントロールの値は、UserFormを閉じて
>しまうと破棄されます。
>したがって、なんとかしたい場合は、Sheetなどに書き出す必要があります。
これは、コンボボックスのリストデータをどこかに保存しなくてはなりません。
シート以外にも保存する方法はいくつか考えられますが、シートにデータを
保存するのが一番安全です。
何てったってシートは、究極のスーパーカリスマ? テンポラリ領域なのですから。
Excelを使うのにこのシートを使わないのは、もったいないですね!!
前回の投稿の修正も合わせて
>ユーザーフォーム(Userform1)に
> テキストボックス---Textbox1
> コンボボックス-----Combobox1
> コマンドボタン-----Commandbutton1
>が配置されていたとします。
>
>このUserform1のモジュールに
'=============================================================
Option Explicit
'=============================================================
Private Sub CommandButton1_Click()
With ComboBox1
If .ListCount = 0 Then
.List = Array(TextBox1.Value) '←これの方が簡単でした
ElseIf Trim(TextBox1.Text) <> "" And _
IsError(Application.Match(TextBox1.Value, .List, 0)) Then
.AddItem TextBox1.Value
End If
End With
End Sub
'=============================================================
Private Sub UserForm_Initialize()
With Worksheets("sheet1")
With .Range("a1", .Cells(.Rows.Count, "a").End(xlUp))
If .Cells(1).Value <> "" Then
ComboBox1.List = .Value
End If
End With
End With
End Sub
'=============================================================
Private Sub UserForm_Terminate()
With Worksheets("sheet1")
.Range("a:a").ClearContents
If ComboBox1.ListCount > 0 Then
.Range("a1", .Cells(ComboBox1.ListCount, "a")).Value = ComboBox1.List
End If
End With
End Sub
標準モジュールに
'=============================================================
Sub main()
UserForm1.Show
End Sub
これでmainを実行してみてください。
仕様は、前回と同じですが、コンボボックスのリストデータの保存場所として、
Sheet1というシートのA列を使っています。
よって、初期値としては、Sheet1のA列は、未入力の状態にして置いてください。
これにより、一度登録したコンボボックスリストは、再表示の際、
コンボボックスにSheet1のA列から、再登録されます。
試してみてください。
|
|