通过vba中的多维变量数组减少占用的内存

时间:2017-01-02 23:09:15

标签: excel vba out-of-memory variant

我有一个相当大的数组:

Global add_vit(0 To 6, 0 To 6, 2 To 18, 0 To 1300, 0 To 8) As Variant

我填写部分填写模块a,sub one,(这需要很长时间)。我希望只执行一次子模块。

执行完成后,我想访问模块b,sub two中的上述变量数组,并独立运行模块b sub two多次,以验证我在模块b中工作的代码,sub two

我了解到“全局”部分意味着即使在模块a,子模块完全完成之后,数组也将被填充/保留。这就是我需要的,但与此同时,我遇到了内存错误的边界。

我在运行模块a,sub 2中有几个这样的数组都是相互链接的,在某些条件下我需要将特定的条目复制到其他特定的数组条目。这也阻止了我将最后一个全局数组的计算分成另一个模块。

我也感到困惑的是当出现“内存不足”错误时,当我在不同时间以相同的初始条件运行相同的脚本时感觉到的随机性,我认为这是因为excel可用的内存量不是静态的,而是依赖于我在笔记本电脑上同时使用的其他过程。

是否有人建议如何在存储可访问(约8.000.000)的同时保持相同数量的条目(对于双打和多头),(或双打和布尔),同时仍然能够访问当初始计算完成而不占用如此多的内存时,它们来自不同的模块?*

*无需手动将它们存储到excel表中,因为它很繁琐,并且大大减慢了计算速度。

我还尝试在使用以下脚本进行计算之前手动重置整个数组:

For A = 0 To 6
    For B = 0 To 5
        For C = 2 To 18
            For d = 0 To 1300
                For e = 0 To 4
                    add_vit(A, B, C, d, e) = ""
                Next e

                For f = 6 To 7
                    add_vit(A, B, C, d, e) = False
                Next f
            Next d
        Next C
    Next B
Next A

1 个答案:

答案 0 :(得分:0)

感谢您的提示!

@ A.S.H谢谢你我已经测试并验证了在子/模块完成之后,公众确实也保留了它的价值。 所以我向@ThunderFrame道歉,你是对的,我可以使用公共而不是子,谢谢。

@ user3598756谢谢,这是我最初寻找的陈述,erase陈述。

@Absinthe我忘了提到模块2实际上是一个通常用userfomX.show调用的形式的子,我仍然需要查找变量如何传递给它。但主要是我正在寻找的两个模块的分离,这意味着我想运行模块2而不需要每次都运行module1,同时仍然使用单个运行模块1的存储输出。

非常感谢大家,你太棒了!