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

问题描述 投票:0回答:1

场景

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

问题

单击第二个用户窗体中出现的一个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,这次也没有错误

这很令人困惑。如果对此有任何了解,请有人帮助

excel vba out-of-memory
1个回答
0
投票

[经过一些试验后,发现问题是由于ListBox2.RowSource = "C6:" & LastAddressRowSource属性。我不知道为什么它会引起内存问题。我删除了此代码,并使用其他循环方法填充Listbox2,如下所示

        Range("C6").Select
        Do While ActiveCell.Value <> ""
            With ListBox2
                .AddItem ActiveCell.Value
            End With
            ActiveCell.Offset(1, 0).Select
        Loop

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

© www.soinside.com 2019 - 2024. All rights reserved.