【原创】VBA学习笔记(306)VBA中关于 exit 的用法


1 exit 用法的简要总结
1.1 具体用法
exit do                  '  用在do  loop 循环里
exit for                  '  用在 for next 循环里
exit sub                 ' 用在sub里
exit function           ' 用在function里
exit propperty           '??
 

1.2 错误的用法
exit                '不能单独使用
exit if              '一般并没有必要跳出 if 吧
 

 

2 exit for 只会跳出本层循环
 

2.1 正常2层循环
Sub ponymatest1()

For i = 1 To 10
For j = 1 To 5
If j = 3 Then
m = m + 1
Debug.Print "第" & m & "次" & "j=" & j
End If
Next
If i = 7 Then
n = n + 1
Debug.Print "第" & n & "次" & "i=" & i & " ";
End If

Next
End Sub


 

2.2 可以看出exit 跳出的循环只是本层的循环
两层for 循环,对应的 exit for 只会跳出本层
Sub ponymatest1()

For i = 1 To 10
For j = 1 To 5
If j = 3 Then
m = m + 1
Debug.Print "第" & m & "次" & "j=" & j
Exit For
End If
Next
If i = 7 Then
n = n + 1
Debug.Print "第" & n & "次" & "i=" & i & " ";
Exit For
End If
Next
end sub
 

 

 

2.3 如果是exit sub 会跳出整个sub
exit for  跳出循环
exit sub 跳过整个过程,停止执行这个sub
Sub ponymatest1()

For i = 1 To 10
For j = 1 To 5
If j = 3 Then
m = m + 1
Debug.Print "第" & m & "次" & "j=" & j
Exit Sub
End If
Next
If i = 7 Then
n = n + 1
Debug.Print "第" & n & "次" & "i=" & i & " ";
Exit For
End If
Next
end sub


 

3 end 和 exit sub的差别不大?
end sub 只能用在最后,并且end sub 后面不能有 有效的语句代码
只有 end 可能出现在 代码块的中间
end 和exit sub 是有差别的
虽然看起来,只运行1个sub的话差别不大的样子?
3.1 原始代码
Sub ponymatest1()
For i = 1 To 5
If i = 3 Then
Debug.Print "i*i=" & i * i
End If
Next
ponymatest2
End Sub


Sub ponymatest2()
Debug.Print "hello, I am " & "ponymatest2"
End Sub
 

 

3.2 加入exit for
Sub ponymatest1()
For i = 1 To 5
If i = 3 Then
Debug.Print "i*i=" & i * i
Exit For
End If
Next
ponymatest2
End Sub


Sub ponymatest2()
Debug.Print "hello, I am " & "ponymatest2"
End Sub


 
3.3 加入 exit sub 
跳出了sub 不再执行后面的语句
Sub ponymatest1()
For i = 1 To 5
If i = 3 Then
Debug.Print "i*i=" & i * i
Exit Sub
End If
Next
ponymatest2
End Sub


Sub ponymatest2()
Debug.Print "hello, I am " & "ponymatest2"
End Sub


 

3.4 加入end
结束了sub 不再执行后面的语句
Sub ponymatest1()
For i = 1 To 5
If i = 3 Then
Debug.Print "i*i=" & i * i
End
End If
Next
ponymatest2
End Sub


Sub ponymatest2()
Debug.Print "hello, I am " & "ponymatest2"
End Sub
 

 

 

4 end 和 exit sub的真实差别
4.1 变量释放上不一样
End释放所有变量的内存,然后退出所有sub
而exit sub仅仅退出当前sub ,并不释放变量

Dim a


Sub ponymatest1()
a = 101
Exit Sub
End Sub


Sub ponymatest2()
a = 102
End
End Sub


Sub ponymatest3()
Debug.Print a
End Sub

Sub test1()
ponymatest1
ponymatest3
End Sub

Sub test2()
ponymatest2
ponymatest3
End Sub
4.2 end 会终止所有正在运行的VB程序?
如果你正在运行的只有一个程序,两个是一样的,如果同时运行的有两个程序,则
exit sub 只退出当前程序
end 结束所有程序的运行
 

4.3 end 会终止sub 和其他窗体等
end不管关闭这个sub ,还会关闭其他东西: 窗体等
在含有窗体操作时特别需要注意。
比如,在窗体上有一个按钮,如果这个按钮执行的程序中含有 exit sub 是退出按钮所执行的程序,窗体不会关闭。
end  不但退出按钮所执行的程序,连窗体也会关掉,所有正在运行的程序都会关掉
 

5 加了exit , 是否可以不需要本身的结尾了?---不能省略其他关键字
比如 for  next 如果有了exit for 了 可以不需要next了吗?  不行
do loop 中间有了 exit do ,显然还是需要末尾有 loop的
sub   ...    end sub 也是不能省略的
function  ...   end function
Sub ponyma1()

arr1 = Range("j1:k10")
For i = LBound(arr1) To UBound(arr1)
For j = LBound(arr1, 2) To UBound(arr1, 2)
If arr1(i, j) > 999 Then
Debug.Print arr1(i, j)
Exit For
End If '有exit for了,是不是可以不要end if? '如果缺少这个,会显示next没有for
Next

If arr1(i, j) = "a" Then
Debug.Print arr1(i, j)
Exit Sub
End If

Next

'Exit Sub

End Sub
 
————————————————
版权声明:本文为CSDN博主「奔跑的犀牛先生」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xuemanqianshan/java/article/details/103771844


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM