场景
我有两个用户窗体,当我单击第一个用户窗体中的按钮时,将显示第二个用户窗体,然后卸载第一个用户窗体。
问题
单击第二个用户窗体中出现的一个listbox
时出现内存错误
我的userform2
如下
以及以下错误
下面是userform2
中的全部代码
Private Sub UserForm_Initialize()
Dim reportWbi As Workbook
Dim internal As Worksheet
Set reportWbi = Workbooks.Add(reportFile)
Set internal = reportWbi.Worksheets("Internal")
internal.Select
LastAddress = internal.Range("C" & Rows.Count).End(xlUp).Address
ListBox2.RowSource = "C6:" & LastAddress
reportWbi.Close savechanges:=False
Set reportWbi = Nothing
Set internal = Nothing
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
reportCreator.Show
End Sub
实际上,里面没有太多变量或东西。逐一调试后,我注意到,没有以下几行,就没有内存错误
reportWbi.Close savechanges:=False
Set reportWbi = Nothing
Set internal = Nothing
我给行reportWbi.Close savechanges:=False
的那一刻,它抛出了内存错误。
仅说明一下,我正在使用Office 365和8Gb RAM。我认为这不会引起任何问题
有人知道出什么问题了吗?
编辑1
我将整个代码尝试成一个品牌excel文件,只有一个用户表单,并且具有相同的内存错误。我删除reportWbi.Close savechanges:=False
的那一刻,一切正常,没有任何错误
编辑2
我删除了ListBox2.RowSource = "C6:" & LastAddress
代码,即使有reportWbi.Close savechanges:=False
,这次也没有错误
这很令人困惑。如果对此有任何了解,请有人帮助
[经过一些试验后,发现问题是由于ListBox2.RowSource = "C6:" & LastAddress
此RowSource
属性。我不知道为什么它会引起内存问题。我删除了此代码,并使用其他循环方法填充Listbox2
,如下所示
Range("C6").Select
Do While ActiveCell.Value <> ""
With ListBox2
.AddItem ActiveCell.Value
End With
ActiveCell.Offset(1, 0).Select
Loop
现在没有内存问题,一切正常