使用ListStyle = fmListStyleOption保留MSForms ListBox的内容

时间:2017-10-24 23:22:53

标签: excel-vba listbox userform listboxitem vba

我在VBA Excel中创建了一个UserForm,其中包含一个ListBox,并选择了ListStyleOption。 MultiSelectMulti选项已激活。 每当我关闭UserForm或工作簿然后重新打开时,所有先前的选择都将消失。有没有办法保留列表框中的选择?

感谢。

1 个答案:

答案 0 :(得分:0)

是的,它是可能的,但您必须将列表框项及其选定状态保存在工作簿或某些数据支持(如文件或数据库)中。在显示表单时,您只需回读已保存的项目和选定的状态。

假设您可以将列表的内容保存在工作簿中,您可以使用以下内容:

C:\Python27\Lib\site-packages\oauth2client
C:\Program Files (x86)\Google\Google_Appengine\lib\google-api-python-client\oauth2client

要保存(例如,您可以在表单上设置“保存列表”按钮),请将引用传递给列表框,并引用工作簿中某个位置的空闲区域的左上角单元格。请注意,代码将从此点向下写入2列,并覆盖可能位于其路径中的所有内容。您还必须确保此单元格是隔离的,即不会在任何方向上与其他内容紧邻。

示例: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

您可以在表单上添加“加载列表”按钮。要加载您的列表:SaveList ListBox1, Sheet1.Cells(1, 1)

此答案中使用的重要列表框属性是LoadList ListBox1, Sheet1.Cells(1, 1)Selected,它们提供列表中任何项目的选定状态和标签。这些是从零开始的索引属性。