【发布时间】:2020-01-09 02:27:30
【问题描述】:
场景
我有两个用户窗体,当我单击第一个用户窗体中的按钮时,将显示第二个用户窗体,然后卸载第一个用户窗体。
问题
点击第二个用户窗体中的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 存在也没有错误
为什么会发生这种情况非常令人困惑。如果对此有任何了解,请有人帮忙
【问题讨论】:
-
在指定路径中先尝试workbook.SaveAs。
-
我就是这样做的。但是当我试图关闭该文件的那一刻,错误再次弹出
-
只有当我点击列表框而不是加载用户表单时才会发生这种情况
-
1.该列表框没有事件代码,所以我不知道它是如何导致问题的。 2. 尝试在
reportCreator.Show上设置一个断点,看看在关闭工作簿时是否调用了它。 -
@Nick.McDermaid 1. 对于这种情况,当我点击
listbox时也没有事件代码,它会抛出内存错误 2. 是的,它正在调用reportCreatoruserform
标签: excel vba out-of-memory