Ja, es ist möglich, aber Sie müssen die Listbox-Elemente und ihren ausgewählten Status in der Arbeitsmappe oder einige Daten unterstützen wie eine Datei oder eine Datenbank speichern. Wenn Sie Ihr Formular anzeigen, lesen Sie einfach die gespeicherten Elemente und ausgewählten Status zurück.
Unter der Annahme, können Sie die Liste der Inhalt in der Arbeitsmappe speichern, können Sie so etwas wie die folgenden verwenden:
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
zu speichern (zB könnten Sie eine Liste speichern Schaltfläche auf dem Formular haben), einen Verweis übergeben Ihre Listbox und ein Verweis auf die oberste linke Zelle einer freien Zone irgendwo in Ihrer Arbeitsmappe. Beachten Sie, dass der Code von diesem Punkt aus in zwei Spalten schreibt und alles überschreibt, was sich auf seinem Pfad befindet. Sie müssen auch sicher sein, dass diese Zelle isoliert ist, d. H. Nicht unmittelbar benachbart zu anderem Inhalt in irgendeiner Richtung.
Beispiel: SaveList ListBox1, Sheet1.Cells(1, 1)
Sie könnten eine Liste laden Schaltfläche auf dem Formular haben. So laden Sie wieder Ihre Liste: LoadList ListBox1, Sheet1.Cells(1, 1)
Die wichtigen listbox Eigenschaften in dieser Antwort verwendet werden, sind Selected
und List
, die den ausgewählten Zustand und Markierung jedes Element in der Liste geben. Dies sind nullbasierte indizierte Eigenschaften.
Großartig! .. Danke Excelosaurus. –