【问题标题】:Excel VBA keep Listbox from workbook persistent after sourse is closedExcel VBA 在源关闭后保持工作簿中的列表框保持不变
【发布时间】:2015-02-20 12:34:07
【问题描述】:

我在从外部工作簿填充的用户窗体上有一个列表框。如果我保持源电子表格打开,则列表框会正确显示。当我关闭外部工作簿时,列表框似乎不再正确显示,如果滚动列表框文本将替换为一堆非打印字符。

我启动用户表单,当用户选择一个复选框时,用户表单将被用于显示附加字段。

Private Sub chkRepaceFromList_Click()
    Dim sFileLocation As String
    'When checkbox is checked, add replace from list option
    If chkRepaceFromList = True Then
      Me.Width = 400
      sFileLocation = "C:\My File.xlsx"
      'Populate listbox with items in replace from list spreadsheet
      Call UpdateReplaceList
    Else
      Me.Width = 160
    End If
End Sub

UpdateReplaceList 用“C:\My File.xlsx”中的项目填充列表框

Sub UpdateReplaceList()
    Dim sFileLocation As String
    Dim wbList As Workbook
    sFileLocation = "C:\My File.xlsx"
    Set wbList = Workbooks.Open(sFileLocation)
    wbList.Worksheets("Sheet1").Range("A10").Select
    Range("A10", Selection.End(xlDown).Offset(0, 1)).Select ' Select all data
    With lstReplaceListListBox
        .ColumnCount = 2
        .ColumnWidths = "100;100"
        '.RowSource = wbList.Range("A1:C20").Address
        .RowSource = Selection.Address
        '.RowSource = vList
    End With
    wbList.Close
End Sub

我不想让“C:\My File.xlsx”保持打开的时间超过需要的时间,如果我不关闭它,chkRepaceFromList_Click() 事件就会被触发,它会尝试打开已经打开的文件。

我正在使用 Sub UpdateReplaceList,因为当按下其他一些按钮时,我需要使用相同的代码。

任何建议将不胜感激。

【问题讨论】:

    标签: vba userform


    【解决方案1】:

    事实证明,如果你声明一个未分配的数组。

    Dim vList() As Variant
    

    分配数据时分配

    vList = Selection 'copy data from workbook to memory as an array
    

    然后您可以将数组分配给列表框。

    With lstReplaceListListBox
            .ColumnCount = 2
            .ColumnWidths = "100;100"
            .list = vList 'Copy array to listbox
        End With
    

    当源工作簿关闭时,它会在列表框中保持不变。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多