vba 多维变体数组减少内存占用

Reducing occupied memory by multidimensional variant array in vba

我有一个相当大的数组:

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

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

执行完成后,我想独立多次访问模块 b、子二和 运行 模块 b 子二中的上述变体数组,以验证我正在处理的代码在模块 b 中,子二。

我了解到 "Global" 部分意味着数组将是 filled/preserved 即使在模块 a、子 one 完全完成之后。这就是我所需要的,但与此同时,我 运行 处于内存不足错误的边缘。

我在 运行 模块 a、子二中有几个这样的数组,它们都是相互关联的,在某些情况下,我需要将特定条目复制到数组的其他特定条目。这也阻止了我将最后一个全局数组的计算分离到另一个模块中。

我也对 "out of memory" 错误发生时的感知随机性感到困惑,当我 运行 在不同时间使用相同初始条件的相同脚本时,我认为这是因为excel 的可用内存量不是静态的,而是取决于我在笔记本电脑上同时使用的其他进程。

有没有人建议如何在可访问的存储中保持相同数量的条目(对于双数和多数)(或双数和布尔值)(大约 8.000.000)同时仍然初始计算完成后可以从不同的模块访问它们而不占用那么多内存?*

*无需手动将它们存储到 excel sheet 中,因为它很乏味并且会大大减慢计算速度。

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

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

感谢您的提示!

@A.S.H 谢谢 我已经测试并验证 public 在 sub/module 完成后确实也保留了它的值。 所以我向@ThunderFrame 致歉,你是对的,我可以使用 public 而不是 sub,谢谢。

@user3598756 谢谢,那是我最初寻找的声明,erase 声明。

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

非常感谢大家,你们真棒!