首页 > 解决方案 > 需要建议:VBA,从 BOM 中收集范围以一次更改多行的格式

问题描述

早上好,我需要一些建议。

首先,这是我的完整脚本。我正在迭代制造 BOM:

在此处输入图像描述

我在 VBA 方面不是最擅长的,但我整理了一个工作脚本,根据级别填充这些行的颜色/边框。目前,我在 for 循环中使用 union 将范围分组在一起:

Case 1
    If arrRngFill(1) Is Nothing Then
        Set arrRngFill(1) = Range(Cells(rwCount, 1), Cells(rwCount, colLast))
    Else
        Set arrRngFill(1) = Union(arrRngFill(1), Range(Cells(rwCount, 1), Cells(rwCount, colLast)))
    End If

    'etc... for 8 levels

但是,我正在迭代超过 190,000 行,这些行都停止了。

因此,作为一个 hacky 工作,我每 6000 个循环应用一次格式(越多越慢)并清除数组:

'Do stuff and release every 6000 ticks or on last row - Union is super slow when it gets big for some reason
If releaseTick = 6000 Or lvlNext = -1 Then
    If Not arrRngFill(1) Is Nothing Then Call SetFill(arrRngFill(1), RGB(44, 35, 45), RGB(0, 0, 0), RGB(0, 0, 0), True)
    If Not arrRngFill(2) Is Nothing Then Call SetFill(arrRngFill(2), RGB(77, 76, 125), RGB(0, 0, 0), RGB(0, 0, 0), True)

    'etc..... for 8 levels

    Erase arrRngFill
    releaseTick = 1
End If

我的问题是:有没有一种更简洁的方法可以在不减慢脚本速度的情况下做到这一点?我的目标是一次应用所有格式。每 6000 次循环都必须转储格式似乎是错误的,我认为我遗漏了一些东西。目前,该脚本在 190,000 行中大约需要 5.5 秒。

感谢您的关注!

标签: excelvbaloops

解决方案


推荐阅读