首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MSForms ListBox的ListStyle = fmListStyleOption持久化内容

MSForms ListBox的ListStyle = fmListStyleOption持久化内容
EN

Stack Overflow用户
提问于 2017-10-24 23:22:53
回答 1查看 504关注 0票数 1

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

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-25 00:23:59

是的,这是可能的,但是您必须将列表框项及其选定的状态保存在工作簿中,或者保存一些数据支持,如文件或数据库。当显示表单时,您将只读取保存的项和选定的状态。

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

代码语言:javascript
运行
复制
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)

表单上可以有一个List按钮。要加载您的列表:LoadList ListBox1, Sheet1.Cells(1, 1)

此答案中使用的重要列表框属性是SelectedList,它们提供列表中任何项的选定状态和标签。这些是基于零的索引属性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46921478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档