2017-10-24 6 views
1

ListStyleOptionが選択されたListBoxを持つVBA Excelでユーザーフォームを作成しました。 MultiSelectMultiオプションが有効になります。 ユーザーフォームまたはワークブックを閉じてから再度開くときは、前の選択がすべて消えてしまいます。リストボックスでの選択を保持する方法はありますか?ListStyle = fmListStyleOptionのMSForms ListBoxの内容を保持する

ありがとうございました。

答えて

0

はい、可能ですが、リストボックスのアイテムとその選択した状態をブックまたはファイルやデータベースなどのデータサポートに保存する必要があります。あなたのフォームを表示するとき、保存されたアイテムと選択された状態だけを読み返します。への参照を渡す、(例えば、あなたのフォームに保存リストボタンを持つことができます)を保存するには

Public Sub SaveList(ByVal plstListBox As MSForms.ListBox, ByVal prngSavePoint As Excel.Range) 
    On Error GoTo errHandler 

    Dim lRow As Long 
    Dim bScreenUpdating As Boolean 
    Dim bEnableEvents As Boolean 

    bScreenUpdating = Application.ScreenUpdating 
    bEnableEvents = Application.EnableEvents 

    Application.ScreenUpdating = False 
    Application.EnableEvents = False 

    prngSavePoint.CurrentRegion.Clear 

    If plstListBox.ListCount > 1 Then 
     For lRow = 0 To plstListBox.ListCount - 1 
      prngSavePoint.Cells(lRow + 1, 1).Value = plstListBox.Selected(lRow) 
      prngSavePoint.Cells(lRow + 1, 2).Value = plstListBox.List(lRow) 
     Next 
    End If 

Cleanup: 
    On Error Resume Next 
    Application.EnableEvents = bEnableEvents 
    Application.ScreenUpdating = bScreenUpdating 
    Exit Sub 

errHandler: 
    MsgBox Err.Description, vbExclamation + vbOKOnly, "Error" 
    Resume 'Cleanup 
End Sub 

Public Sub LoadList(ByVal plstListBox As MSForms.ListBox, ByVal prngSavePoint As Excel.Range) 
    Dim lRow As Long 
    Dim vntSavedList As Variant 

    plstListBox.Clear 

    If Not IsEmpty(prngSavePoint.Cells(1, 1).Value) Then 
     vntSavedList = prngSavePoint.CurrentRegion.Value 

     For lRow = 1 To UBound(vntSavedList, 1) 
      plstListBox.AddItem vntSavedList(lRow, 2) 
      plstListBox.Selected(lRow - 1) = vntSavedList(lRow, 1) 
     Next 
    End If 
End Sub 

:あなたは、ブック内のリストの内容を保存することができ、あなたは以下のようなものを使用することができると仮定すると、

あなたのリストボックス、およびブックのどこかのフリーゾーンの左上のセルへの参照です。コードはこの点から2列に書き込んで、そのパスにある可能性があるすべてのものを上書きすることに注意してください。また、このセルが隔離されていること、つまり、他のコンテンツに直接隣接していないことを確認する必要があります。

例:SaveList ListBox1, Sheet1.Cells(1, 1)

あなたは、フォームのLoad Listボタンを持つことができます。 LoadList ListBox1, Sheet1.Cells(1, 1)

この回答で使用される重要なリストボックスプロパティは、リスト内の項目の選択された状態とラベルを与えるSelectedListです。これらはゼロベースのインデックス付きプロパティです。

+0

素晴らしい!..おかげでExcelosaurus。 –

関連する問題