Excel VBA 在 sourse 关闭后保留工作簿中的列表框
Excel VBA keep Listbox from workbook persistent after sourse is closed
我在从外部工作簿填充的用户窗体上有一个列表框。如果我保持源电子表格打开,列表框会正确显示。当我关闭外部工作簿时,列表框似乎不再正确显示,如果您滚动列表框文本,则会替换为一堆非打印字符。
我启动用户表单,当用户选中一个复选框时,用户表单会展开以显示其他字段。
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,因为我需要在按下其他一些按钮时使用相同的代码。
如有任何建议,我们将不胜感激。
事实证明,如果您声明一个未分配的数组。
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
当源工作簿关闭时,它会一直保留在列表框中。
我在从外部工作簿填充的用户窗体上有一个列表框。如果我保持源电子表格打开,列表框会正确显示。当我关闭外部工作簿时,列表框似乎不再正确显示,如果您滚动列表框文本,则会替换为一堆非打印字符。
我启动用户表单,当用户选中一个复选框时,用户表单会展开以显示其他字段。
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,因为我需要在按下其他一些按钮时使用相同的代码。
如有任何建议,我们将不胜感激。
事实证明,如果您声明一个未分配的数组。
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
当源工作簿关闭时,它会一直保留在列表框中。