vba-excel中有以下任务:
在 AutoCAD 中选择块,然后将两个值写入 Excel 列 - 块属性标记的名称 (*autocad)、单元格 A1 及其文本值、单元格 A2。对于样本中的所有块,依此类推。
在这种情况下,首先将标签名称写入列中(检查列中已写入的标签名称)。然后,根据标签名称,写入该标签的文本值。
每次这些都是 For..Next 周期。
请告诉我如何优化此类程序以提高速度:使用数组、类和集合?
示例代码:
For Each lBlockObj In objSelectionSet
Set lBlock = acadDoc.SelectionSets("TempSSet").Item(I - 1)
varAttributes = lBlockObj.GetAttributes
'добавление имен тэгов здесь без проверки что уже есть
For n = LBound(varAttributes) To UBound(varAttributes)
Cells(2, at_hed).Value = varAttributes(n).TagString
at_hed = at_hed + 1
Next n
'запись атрибутов
For r = 2 To Col_N1
For n = LBound(varAttributes) To UBound(varAttributes)
If varAttributes(n).TagString = Cells(2, r).Value Then ActiveCell.Offset(0, r - 2).Value = varAttributes(n).MTextAttributeContent
Next n
Next r
ActiveCell.Offset(1, 0).Activate
Set lBlock = Nothing
Next lBlockObj
解决方案
我建议你这个解决方案(假设现有的块和新的块都不是按标签排序的,否则必须删除相应的排序):
解决方案过程采用两个参数:
块的原始顺序被保留。
即使处理大量数据(数百万条记录,尽管只有 16384 列),它的工作速度也非常快。您应该垂直放置块。
测试
要测试,请运行测试。 Sheet3 对我来说只是测试新块。其中既有现有的,也有新建的。测试新块由 GetAttributes 函数读取,您不需要实现该函数。 varAttributes 数组中有新块。
测试数据-Sheet2
表3