.Listbox.Rowsource =“”的运行时错误

时间:2018-01-18 15:51:25

标签: excel vba memory listbox

Excel有时会抛出以下错误:

  

运行时错误'-2147024882(8007000e)':

     

无法设置Rowsource属性。没有足够的存储空间来完成此操作。

.ListBox.RowSource = ""指令上。

Private Sub reset_listbox_proposition_UF4()

    With UserForm_4_RADIATEURS
        With .ListBox_propositions
            .RowSource = ""              '<---- HERE !!
            .Clear
            .BackColor = couleur_Gris
            .ColumnHeads = False
        End With
    End With

End sub

此子项经常使用,但在特定的事件序列之后只会偶尔崩溃一次。我设法重现了这个错误并注意到:

  • .RowSource已设置并指向现有工作表
  • Excel在具有8Go内存的PC上使用了大约250,000K的工作集内存,峰值为293,000K(根据任务经理)。

更奇怪的是:

  • 如果我跳到下一条指令(.Clear),该指令也将失败
  • 如果我然后跳回.RowSource = ""(尝试.Clear后),它会成功!

我不知道为什么它失败了,而且为什么只有一次偶尔和/或一些序列之后。有什么想法吗?

备注

  • 这个宏很大XLAM Add-In
  • 我正在使用.RowSource = "".Clear,因为可以使用.RowSource = "Liste_propositions!A2:S" & nb_X.List = Array_Propositions设置ListBox。看起来Excel对此并不满意......

编辑:可用于Excel的内存

我使用这个基本子进行了一些测试并递增了X:

Dim myArray() As Double
ReDim myArray(20000, X)

我让Excel使用超过2,300,000K的工作集内存(X = 13400)。

所以我会说内存/ RAM不足并不是我的宏中的问题,因为它会在Excel使用不到300,000K时抛出错误。

1 个答案:

答案 0 :(得分:1)

如果Excel的当前值指向已删除的.Rowsource,则Excel似乎无法更新Worksheet属性:

看起来问题来自.Rowsource中引用的工作表已在.Rowsource=""之前删除。事实上,我只需删除此Ws即可重现“运行时错误......存储空间不够...... ”。

此外,在此宏中,引用的Worksheet被删除,但也在.Rowsource=""指令之前重新创建(这对查找问题没有帮助)。

=&GT;虽然.Rowsource属性是使用Ws.Name设置的,但Excel似乎对.Codename使用了严格的引用(Ws?)。

修改 如果删除了Rowsource中引用的工作表,即使我立即重新创建相同的工作表,也会在新工作簿/ userform上运行另外的测试,确认列表框将不再有效。