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

 

 

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值