【原創】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