【发布时间】:2022-11-11 21:45:45
【问题描述】:
大家好,我正在审查 VBA 中的一些遗留代码,我需要对其进行优化以提高性能。 我是 VBA 的新手,需要一些帮助。 我想将这些单元格分配更改为范围和数组分配以显着提高性能,但我似乎无法将单元格引用转换为范围。
Sheets("Model").Activate
YearRange = Range("C7:EZ7").value
loopvar = 1
Do While YearRange(1, loopvar) <> "" And Right(Trim(YearRange(1, loopvar)), 1) <> "E"
strValue = Trim(YearRange(1, loopvar))
Year = CInt(strValue)
GetSpecificData Year, RptPe, RptAvg
If (RptPe <> 0) Then Cells(508, loopvar + 2).value = RptPe
If (RptAvg <> 0) Then Cells(509, loopvar + 2).value = RptAvg
loopvar = loopvar + 1
Loop
这是我要改进的一段代码,单元格分配大约是 15 个,我只放了 2 个作为参考,通常我们谈论的是 30 年或更长时间,所以这段代码的运行通常需要大约 20 年或秒。
我在另一个地方有一个类似的循环,但不是单元格使用范围,我能够创建一个数组,然后将数组分配给范围并将时间减少到不到 1 秒。
更新 1:GetSpecificData 从一年中获取数据并用数据填充变量,这样做所花费的时间可以忽略不计。 瓶颈似乎是将数据分配给单元格。
【问题讨论】:
-
GetSpecificData()会发生什么? -
获取特定数据,从数据库中获取数据并用数据填充变量
-
为了澄清,您在每个循环期间都在查询?
-
不完全是它确实有很多方法和技术来减少时间,我们已经对不同的部分进行了计时,这个调用占总时间的不到 10%
-
不显示功能,看全貌,是无济于事的。