gpt4 book ai didi

excel - 在 VBA 中,使用 With、End With 是否总是更好?

转载 作者:行者123 更新时间:2023-12-02 23:36:22 34 4
gpt4 key购买 nike

即使是引用同一对象的两行代码,编写额外的行来合并 With 和 End With 是否总是更快?

例如:

If Target.Column <> 1 Or Target.Row >= 100 Then Exit Sub

对比:

With Target
If .Column <> 1 Or .Row >= 100 Then Exit Sub
End With

这是否太过分了?

是否取决于代码本身来权衡两次引用对象与编写三行单独的行?或者写三行总是更快?

关于速度的问题 - 就处理速度而言,编写此行的最佳方式是什么?即第二个测试是否更快地读取为

> 99

>= 100

测试行号和列号的顺序重要吗?

最佳答案

我已经测试了使用 With 与使用以下子命令在每个实例中引用 Range 对象的速度:

Sub WithSpeed()
Dim StartTime As Double
Dim SecondsElapsed As Double
Dim av As Double
Dim Target As Range
Dim i As Long, j As Long

'Remember time when macro starts
StartTime = Timer

Set Target = Sheet1.Cells(1, 1)

For j = 1 To 5
For i = 1 To 1000000
With Target
If .Column <> 1 Or .Row >= 100 Then Exit For
End With
Next i
av = av + Round(Timer - StartTime, 2)
Next j

'Determine how many seconds code took to run
Debug.Print 1, av / 5
End Sub

Sub NoWithSpeed()
Dim StartTime As Double
Dim SecondsElapsed As Double
Dim av As Double
Dim Target As Range
Dim i As Long, j As Long

'Remember time when macro starts
StartTime = Timer

Set Target = Sheet1.Cells(1, 1)

For j = 1 To 5
For i = 1 To 1000000
If Target.Column <> 1 Or Target.Row >= 100 Then Exit For
Next i
av = av + Round(Timer - StartTime, 2)
Next j

'Determine how many seconds code took to run
Debug.Print 2, av / 5
End Sub

结果:

first sub:  
> 1 2.966
> 1 3.04
> 1 2.726
> 1 2.634
> 1 2.616
second sub:
> 2 2.924
> 2 2.708
> 2 2.506
> 2 2.496
> 2 2.724

每个子循环 500 万次。我将每个子程序运行了 5 次,每个子程序总共运行了 2500 万次循环。 500 万次循环后,子程序打印出 100 万次循环所花费的平均时间。

平均值:
1:2.80秒
2:2.67秒

我坚信这种差异可以忽略不计,并且可以归因于 PC 处理速度的偏差。
当您开始在更多行中引用时,这可能很重要,但使用 With 不太可能对代码的速度产生很大影响。

我仍然强烈建议使用它,以提高代码可读性并防止输入错误。

关于excel - 在 VBA 中,使用 With、End With 是否总是更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57671117/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com