| 
    
     |  | おはようございます。 
 >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列から、再登録されます。
 
 試してみてください。
 
 |  |