场景
我有两个用户窗体,当我单击第一个用户窗体中的按钮时,将显示第二个用户窗体,然后卸载第一个用户窗体。
问题
当我单击第二个用户窗体中出现的一个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
也没有错误
这很令人困惑。如果有人对此有所了解,请有人帮忙
答案 0 :(得分:1)
经过一番试验,发现该问题是由于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
现在没有内存问题,一切正常