没有足够的内存资源来完成此操作

时间:2020-01-09 02:27:30

标签: excel vba out-of-memory

场景

我有两个用户窗体,当我单击第一个用户窗体中的按钮时,将显示第二个用户窗体,然后卸载第一个用户窗体。

问题

当我单击第二个用户窗体中出现的一个listbox时出现内存错误

我的userform2如下

enter image description here

以及以下错误

enter image description here

下面是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也没有错误

这很令人困惑。如果有人对此有所了解,请有人帮忙

1 个答案:

答案 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

现在没有内存问题,一切正常

相关问题