ListStyleOptionが選択されたListBoxを持つVBA Excelでユーザーフォームを作成しました。 MultiSelectMultiオプションが有効になります。 ユーザーフォームまたはワークブックを閉じてから再度開くときは、前の選択がすべて消えてしまいます。リストボックスでの選択を保持する方法はありますか?ListStyle = fmListStyleOptionのMSForms ListBoxの内容を保持する
ありがとうございました。
ListStyleOptionが選択されたListBoxを持つVBA Excelでユーザーフォームを作成しました。 MultiSelectMultiオプションが有効になります。 ユーザーフォームまたはワークブックを閉じてから再度開くときは、前の選択がすべて消えてしまいます。リストボックスでの選択を保持する方法はありますか?ListStyle = fmListStyleOptionのMSForms ListBoxの内容を保持する
ありがとうございました。
はい、可能ですが、リストボックスのアイテムとその選択した状態をブックまたはファイルやデータベースなどのデータサポートに保存する必要があります。あなたのフォームを表示するとき、保存されたアイテムと選択された状態だけを読み返します。への参照を渡す、(例えば、あなたのフォームに保存リストボタンを持つことができます)を保存するには
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)
この回答で使用される重要なリストボックスプロパティは、リスト内の項目の選択された状態とラベルを与えるSelected
とList
です。これらはゼロベースのインデックス付きプロパティです。
素晴らしい!..おかげでExcelosaurus。 –