ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 名课 - Power BI数据分析与可视化实战 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
Python自动化办公应用大全 Excel 2021函数公式学习大典 Kutools for Office 套件发布 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: lyhabc

[讨论] 觉得VBA很恶心,居然跳出循环的continue语句都没有

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2012-4-14 21:20 | 显示全部楼层
{:soso_e110:}只能说楼主很厉害,我其他不能说什么了

TA的精华主题

TA的得分主题

发表于 2012-4-14 21:13 | 显示全部楼层
4,6,8楼搞不清结构性语言的特点,结构性语言中是不能出现goto这样的语句的

按照你们的做法,不仅能实现continue、break功能,甚至可以不需要for、do...loop了,完全可以用if、goto来实现,这还是结构性程序吗?可读性在哪里呢?

只是权宜之时用一下,呼吁VBA系统增加continue、break吧,难道这很困难吗?

TA的精华主题

TA的得分主题

发表于 2012-4-14 22:31 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
很多问题都有 n 多种解决方案,非要在一棵树上吊死吗?

TA的精华主题

TA的得分主题

发表于 2012-4-14 22:42 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-4-14 22:43 | 显示全部楼层
本帖最后由 Moneky 于 2012-4-14 22:48 编辑
  1. Sub test1()
  2.     Dim i As Integer
  3.     Dim sum As Integer
  4.     sum = 0
  5.     For i = 1 To 20
  6.         sum = sum + IIf(i Mod 2 <> 0, 0, i)
  7.     Next
  8.     MsgBox "1到20(包括20)所有偶数的和:" + Str(sum)
  9. End Sub
  10. Sub test2()
  11.     MsgBox "1到20(包括20)所有偶数的和:" + Str((2 + 20) * 10 / 2)
  12. End Sub
复制代码
continue可以有一个IF结构来替代。
  1. Sub test3()      'VBA里有没有“提前结束本次循环而进行下一次循环”的语句
  2. Dim i As Integer
  3. Dim sum As Integer
  4. sum = 0
  5. For i = 1 To 20
  6.     If i Mod 2 = 0 Then
  7.         sum = sum + i
  8.     Else
  9.         MsgBox "第" & Str(i) & "次跳出来了,和是:" & Str(sum)
  10.     End If
  11. Next i
  12.     MsgBox "1到20(包括20)所有偶数的和:" + Str(sum)
  13. End Sub
复制代码

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2012-4-14 23:06 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 lu_zhao_long 于 2012-4-14 23:35 编辑
芙蓉妮 发表于 2012-4-14 21:13
4,6,8楼搞不清结构性语言的特点,结构性语言中是不能出现goto这样的语句的

按照你们的做法,不仅能实现c ...


我看了一下 VC 中关于 break 和 continue 两个语句的解释和例子,我个人认为作用与 GOTO 语句类似(在汇编语句中更是条件跳转语句了)。在 VBA 中,只要与 IF ……END IF 块组合是非常容易实现的,所以根本用不着这两个语句。

break语句
break语句用于终止包含它的do、for、switch或while语句的执行。控制传递给该终止语句的后续语句。
语法
跳转语句:
break;
break语句频繁地使用在一个switch语句中以终止一个特殊情况的处理。缺少包含它的迭代语句或switch语句时产生一个错误。
在嵌套的语句中,break语句仅终止直接包含它的do、for、switch或while语句。
你可以使用一个return或goto语句把控制转向该嵌套结构的外面的地方。
如下例子说明了break语句:
for (i=0,i<LENGTH;i++)  /*当执行 break语句时控制返回到这里*/
{  
    for(j=0,j<WIDTH;j++)  
    {      
        if (lins[j]==′ \0′)      
        {
            lengths=j;
            break;
         }
      }
}
这个例子处理一个存储在lines中的可变长度字符串的数组。break语句
导致在每个字符串中找到结尾的空格字符(′\0′)后退出里层的for循环并把该位置存储在lengths中。
在break导致从里层循环退出时变量j不增大。然后控制返回到外层for循环。i增大且重复这个过程直到i大于或等于LENGTH。


continue语句
continue语句把控制传递给包含该语句的do、for或while语句的下一次迭代,绕过do、for或while语句体的任何余下语句。 continue的一般使用是从一个深的嵌套循环中返回到一个循环的开头。
语法
跳转语句:
continue;
确定一个do、for或while语句的下一次迭代如下:
* 在一个do或一个while语句中,通过重新do或while语句中表达式的求值来开始下一次迭代。
* 在一个for语句中的continue语句导致for语句的第一个表达式被求值,然后编译器重新条件表达式的求值,根据其结果,终止或迭代该语句体。有关for语句和它的非终结符的更多信息参见本章后面的“for语句”。
如下是continue语句的例子:
while(i-->0)
{
    x=f(i);
    if (x==1)
       continue;
    y+=x*x;
}
在这个例子中,当i大于0时执行该语句体。首先把f(i)赋给x,然后如果x等于1,则执行continue语句,忽略语句体中其余的语句,执行回到该循环的顶部,求值该循环的测试。

TA的精华主题

TA的得分主题

发表于 2012-4-14 23:09 | 显示全部楼层
应该是看使用者的水平了。看大师们用成什么样都行。

TA的精华主题

TA的得分主题

发表于 2012-4-15 08:32 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-8-23 10:51 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
用IF 就可以解决,,,总是有办法的

TA的精华主题

TA的得分主题

发表于 2012-8-23 11:45 | 显示全部楼层
觉得有些语言很恶心,居然连跳出循环都需要专门的continue语句{:soso_e147:}
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-12-24 03:22 , Processed in 0.027880 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表