我试过的
我已经阅读了一些谷歌搜索结果,他们说我应该简化格式化,但我甚至不知道我如何获得4000种不同的单元格格式,更不用说我使用了哪些格式,所以我可以删除一些.
它也会弹出一些文件运行的时间,但不是全部,直到它出现,然后每次运行时都会发生.由于宏正在做很多工作,包括从头开始创建10张,我不知道该怎么做.
有人知道吗
谢谢
问题:我想知道哪个是在Excel 2003 VBA中处理数组的最佳解决方案
背景:我在Excel 2003中有一个超过5000行的宏.我在过去的两年中构建了它,将新功能添加为新的过程,这有助于细分代码并调试,更改或添加到该功能.缺点是我在多个过程中使用了大量相同的基本信息,这要求我将其加载到具有多次微小差异的数组中.我现在遇到运行时间长的问题,所以我现在能够完全重写.
然后,它将数据粘贴到用于管理流程的多个工作表上,利用要读取的数据表,图表和单元格格式来表示流程流程功能/历史记录.
此文件用于获取多个制造流程项目(最多4个不同的设置,总共最多10个不同的流程,每个流程最多1000个步骤),其中信息是特定于流程的,特定于子流程的分组/排序目的和数据(如运动,库存,CT,......)
Flow位于Excel文件中,而制造数据使用7种不同的OO4O Oracle SQL拉入读取,有些重复使用多次
数组是:
arrrFlow(1到1000,1到4)作为记录类型,带有4个字符串
arrrSubFlow(1到1000,1到10)作为记录类型,包含4个字符串,2个整数和1个单个
arrrData(1到1000) ,1到10)作为记录类型,包含1个字符串,4个整数,12个长整数和1个单个
arriSort(1到1000,1到4)作为整数(用作指针数组,用于对流,子流和数据进行排序)在组,子组和步骤顺序中,同时按步骤顺序保留原始数组)
可能性:
1)将宏重写为一个大的过程,该过程将数据加载到过程中的一个主数组中,一个
Pro:Dimensioned在过程中,而不是作为模块中的公共变量,而不是传递.
Con:使用一个mega过程而不是多个较小的过程更难调试.
2)使用多个过程保持宏但通过Arrays
Pro:使用多个较小的过程更容易调试代码.
骗局:传递阵列(贵?)
3)使用多个过程保持宏,但模块
专业版中的数组是公共变暗变量:使用多个较小的过程更容易调试代码.
骗局:公共阵列(贵?)
那么,社区的判决是什么?有谁知道使用公共阵列与传递数组的费用?这些中的任何一个的成本是否都失去了让我的程序专注于一个功能的难易程度?
更新:
我将库存数据加载到离散级别(每步多个),在聚合级别移动数据(每步一个),以及在汇总级别开始移动库存.我将库存数据按步骤放在工作状态类别(运行,等待,...)中进行聚合.我创建目标已经在工作表上的数据.
我有一个Flow表显示按类型划分的工作流程,目前有3个产品具有相似但不完全相同的流程,2个产品是不同的流程,它们相似但彼此不一样.我已经在不同的流程中为组和子组分配了每组步骤.
我将这些数据放在多个工作表上,一些放在步骤顺序中,一些放在组/子组顺序中.我还需要按组和产品,组/子组和产品,生产线和产品的部分以及产品汇总的数据.
我使用记录类型,所以我实际上有一个可读的三维数组,arrSubFlow(1,1).strStep(第一个设备的第一步的步骤名称),arrData(10,5).lngYest(昨天的第10步的移动)第五台设备).
我的主要优化点将放在我每次从头创建10页的部分.合并单元格,边框,标题,...这是一个非常耗时的过程.我将添加一个部分,将我的数据与页面进行比较以查看是否需要更改,如果需要,只有重新创建它,否则,我将清除每个数据部分,只写入更改为工作表的数据.根据我记录数据的时间,这将是巨大的.但是,每当我更新代码时,我总是尝试改进代码的其他方面.我看到的数据加载到一个结构(数组,记录集,集合)曾经作为一个优化的都一点点,但更多的数据的完整性,所以我没有机会以不同的方式加载不同的表.
我现在看到离开Arrays的主要问题是:
*已经大量投资于它们,但这并不是一个不足以改变的理由
*不知道传递它们是否需要很多成本,因为它将由ByRef
*我使用排序功能创建一个排序的"指针"数组,让我按步骤流顺序离开数组,同时按组/子组顺序轻松引用它.
由于我总是试图为现在和未来制作我的代码,我并不反对将数组更新为RecordSets或Collections,而是仅仅为了改变它们以学习一些很酷的东西.我的阵列工作,从我的研究,他们增加了运行时间的秒数,而不是这2分钟报告的实质数量.因此,如果将来的另一个结构比二维记录类型数组更容易更新,那么请告诉我,但是有人知道将数组传递给过程的成本,假设您没有进行ByVal传递吗?
我有一个用于4种不同分组的总数据集.其中一个值是平均时间,另一个是计数.对于总计,我必须将它们相乘,然后除以计数的总和.目前我使用:
=SUM(D32*D2,D94*D64,D156*D126,D218*D188)/SUM(D32,D94,D156,D218)
Run Code Online (Sandbox Code Playgroud)
如果我能使它更具可读性,我宁愿使用SumProduct.我试着这样做:
=SUMPRODUCT((D2,D64,D126,D188),(D32,D94,D156,D218))/SUM(D32,94,D156,D218)
Run Code Online (Sandbox Code Playgroud)
但正如你在我的帖子中所说,这不起作用.有没有办法像我想要的那样做SumProduct?
好的,第二次尝试编写Stack Overflow问题,如果这看起来很熟悉,请原谅我.
我正在重写一个在2年半的时间内建立的Excel宏,frankenstein风格(添加到零碎).我需要做的一件事就是将数据加载到一个数组中,只加载一次以获得数据的准确性和速度.对于我的技能水平,我将坚持使用Array方法.
我的两种方法是:
那么,Stack Overflow对这两种方法的优点与缺点的看法是什么?谢谢,克雷格......