在VBA中,使用With和End With总是更好吗?

Rob*_*ore 2 excel vba

对于甚至引用同一对象的两行代码,编写额外的行以合并With和End With是否总是更快?

例如:

If Target.Column <> 1 Or Target.Row >= 100 Then Exit Sub
Run Code Online (Sandbox Code Playgroud)

与:

With Target
    If .Column <> 1 Or .Row >= 100 Then Exit Sub
End With
Run Code Online (Sandbox Code Playgroud)

这是过度杀伤力吗?

两次引用对象而不是编写三行代码是否取决于代码本身?还是写三行总是更快?

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

> 99
Run Code Online (Sandbox Code Playgroud)

>= 100
Run Code Online (Sandbox Code Playgroud)

测试行号和列号的顺序有关系吗?

Tim*_*ack 7

我已经测试了使用以下子对象在每个实例中使用Withvs.引用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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

结果:

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 
Run Code Online (Sandbox Code Playgroud)

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

平均:
1:2.80秒
2:2.67秒

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

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