我有一个相当大的数组:
Global add_vit(0 To 6, 0 To 6, 2 To 18, 0 To 1300, 0 To 8) As Variant
我在模块a的子模块中部分填充(这需要很长时间)。我希望只执行一次模块a子模块。
一旦执行完成,我想访问模块b,sub 2中的上述变量数组,并独立运行模块b,subs 2多次,以验证我在模块b,sub 2中正在处理的代码。
我了解到,"全局"部分意味着即使在模块a、子模块完全完成后,阵列也会被填充/保留。这正是我所需要的,但同时,我也会出现内存不足的错误。
我在运行模块a中有几个这样的数组,子两个都是互连的,在某些情况下,我需要将特定的条目复制到数组的其他特定条目中。这也阻止了我将最后一个全局数组的计算分离到另一个模块中。
我还对"内存不足"错误发生时的随机性感到困惑,当我在不同时间以相同的初始条件运行同一个脚本时,尽管我认为这是因为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
感谢您的提示!
@A.S.H谢谢你,我已经测试并验证了在子/模块完成后,公共也确实保留了它的价值。所以我向@ThunderFrame道歉,你是对的,我可以用公共而不是潜艇,谢谢。
@user3598756谢谢,这是我最初想要的语句,erase
语句。
@苦艾酒我忘了提到模块2实际上是一个表单中的子,通常用userfomX.show调用,我仍然需要查找变量是如何传递到它的。但主要是两个模块的分离是我想要的,这意味着我想运行模块2,而不需要每次都运行模块1,同时仍然使用模块1的单次运行的存储输出。
非常感谢大家,你们太棒了!