2017-10-24 4 views

Antwort

0

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.

+0

Großartig! .. Danke Excelosaurus. –