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

 

 

### 实现 Visio 中文字竖排的方法 在 Visio 中实现文字竖排可以通过调整形状中的文本方向来完成。虽然 Visio 并未直接提供类似于 HTML 的 `writing-mode` 属性[^2] 或 C# 的字符串操作方法[^3],但仍可通过内置工具轻松设置。 #### 方法一:通过形状属性调整文字方向 1. **选中目标形状** 首先,在绘图区域中单击要修改的形状。 2. **打开格式菜单** 右键点击该形状并选择“格式 (F)”选项,或者从顶部菜单栏依次进入“主页 -> 形状 -> 对齐方式”。 3. **设置文字方向** 在弹出的对话框中找到“文本”标签页。这里可以更改字体大小、颜色以及对齐方式等参数。特别注意的是,“垂直对齐”部分提供了三个选项:“顶端对齐”、“居中对齐”和“底端对齐”。如果希望文字完全竖直排列,则需进一步启用旋转功能[^1]。 4. **应用角度变换** 继续在同一窗口下寻找“旋转与翻转”的子项。“顺时针旋转90度”或“逆时针旋转90度”能够快速改变整体布局,从而达到竖排效果。 #### 方法二:利用自定义模板预设样式 对于频繁使用的特定风格(比如带竖排文字的功能模块),建议保存为模板文件以便后续调用。具体步骤如下: - 创建一个新的文档页面; - 设计好基础框架后逐一添加所需元素,并按照上述方法配置其内部描述的方向性; - 完成初稿验证无误之后存储至本地路径作为专属资源库的一部分。 以下是基于以上逻辑的一个简单示例代码片段用于演示如何编程控制 Microsoft Office 应用程序对象模型下的自动化流程(假设采用 VBA 编写): ```vba Sub SetVerticalText() Dim vsoShape As Shape ' 假定当前活动窗口存在一个已选定的对象 If ActiveWindow.Selection.Type = visSelTypeCell Then Exit Sub Set vsoShape = ActiveWindow.Selection.PrimaryItem With vsoShape.Characters.TextStyle .WritingDirection = msoWritingDirectionTopToBottomRightToLeft .Orientation = msoTextOrientationUpward End With End Sub ``` 此脚本会将用户指定的目标单元格内的字符重新定向到由上而下的阅读顺序同时保持向上的倾斜姿态。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值