ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南

在vba中for each 中如果有if语句,想跳过当前循环执行下一循环,该如何写?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-11-1 01:38 | 显示全部楼层
本帖最后由 ngnndkkk 于 2012-11-1 01:41 编辑
→友の良杰← 发表于 2012-11-1 00:16
现在的是for each  没有i   求解如何让其进入下一个循环

.net 中可以用continue for来解决,但vb6里面 ...


你的代码太乱了,不明白你要达到的目的究竟是什么。
言归正传:
换个思路就行了:
       If Not sht Is ActiveSheet Then
            Cells(irow, "B").Value = irow - 3
            irow = irow + 1
        End If
即:为什么一定要跳呢?

事后补:你的代码真是一团糟,前后矛盾,忍不住还是多说几句,或者说提醒你。Cells(irow, "B").Value = irow - 3 指向的永远都是活动工作表,可你的目的却是要在非活动工作表上操作,让人无语,究竟目的是什么,只有你自个儿明白了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-11-1 14:57 | 显示全部楼层
ngnndkkk 发表于 2012-11-1 01:38
你的代码太乱了,不明白你要达到的目的究竟是什么。
言归正传:
换个思路就行了:

这段代码是用来动态生成目录用的,但是在生成目录时,又不想把目录所在sheet本身给列进去,所以在遍历worksheets时,要把目录也给过滤掉,所以才会出现在for each 循环中如何跳出的问题
当然可以用if语句来排除,但是想寻求一下其他的解决方案


至于cells(irow,"B”).value=irow-3这句话就是操作当前活动表的,注:当前活动表就是目录表

TA的精华主题

TA的得分主题

发表于 2012-11-1 15:14 | 显示全部楼层
本帖最后由 hehex 于 2012-11-1 15:14 编辑

vba 的语法应该是来自于vb 6.0 吧,好像没有break, continue 之类的进入下次循环的语句。
vb.net 没学过,好像挺难的样子。
如果投机取巧不知道是否work,你在next 前面一句加一个标记比如 1:
然后用那个if XXX=XXXX then goto 1
这样就是直接跳转到next 那里了,如果可以的话不是相当于执行下一次循环了?

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-11-1 15:17 | 显示全部楼层
hehex 发表于 2012-11-1 15:14
vba 的语法应该是来自于vb 6.0 吧,好像没有break, continue 之类的进入下次循环的语句。
vb.net 没学过, ...

是不是可以理解成这样
for each sht in worksheets
    if sht.name="索引" then
       goto 1
    end if
1:next

TA的精华主题

TA的得分主题

发表于 2012-11-1 15:19 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
对,是这样,不过1: 好像要单独占一行吧,具体我没用过,你看看语法上是不是过的去。
1:
next

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-11-1 15:21 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
hehex 发表于 2012-11-1 15:19
对,是这样,不过1: 好像要单独占一行吧,具体我没用过,你看看语法上是不是过的去。
1:
next

恩,其实.net有很多方法封装的很好,大大简化的变成难度,可惜vba用不了……

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-11-1 15:34 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

Public Sub ReLoadIndex()
   Application.ScreenUpdating = False
    Dim tmpst As Worksheet
    Set tmpst = ActiveSheet
    Application.Worksheets("索引").Activate
    '清理残留数据
   Rows("4:104").ClearContents
    Rows("4:104").Borders.LineStyle = xlNone
    Dim sht As Worksheet, irow As Integer, i As Integer
    irow = 4
    For Each sht In Worksheets
       ' If sht.Name <> ActiveSheet.Name And sht.Name <> "参数" And sht.Name <> "模板" Then
       If sht.Name = ActiveSheet.Name Or sht.Name = "参数" Or sht.Name = "模板" Then
            GoTo 1
       End If
       '略去具体业务逻辑代码

       irow = irow + 1
        
1:
    Next
    '激活当前表的A1单元格
    ActiveSheet.Range("A1").Activate
    '激活保存前的表
    tmpst.Activate
    '启用屏幕更新
    Application.ScreenUpdating = True
    '更新状态栏信息
    Application.StatusBar = False
End Sub



试了一下,这样是可行的……(上述代码已经删除部分具体业务逻辑代码,仅保留问题代码)

TA的精华主题

TA的得分主题

发表于 2012-11-1 16:12 | 显示全部楼层
哦,可行实在是太好了。
VB 好像只能这样投机取巧,没有continue 语句,没办法。
从本质上,越专业的人员越会规避使用goto, 这可能是一个思维的盲点吧。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-11-2 01:15 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
hehex 发表于 2012-11-1 16:12
哦,可行实在是太好了。
VB 好像只能这样投机取巧,没有continue 语句,没办法。
从本质上,越专业的人员 ...

可能吧,反正写惯了.net的程序回头来些VB6的有点不习惯……

TA的精华主题

TA的得分主题

发表于 2012-11-3 08:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Private Sub ReloadBtn_Click()
    Rows("4:65536").ClearContents
    Dim sht As Worksheet, irow As Integer, i As Integer
    irow = 4
    For Each sht In Worksheets
        If sht.Name <> ActiveSheet.Name Then
                '这里需要跳出当前循环,执行下一循环
        Cells(irow, "B").Value = irow - 3
            irow = irow + 1
        End If
        
    Next
   
End Sub



不知道这样能不能得到你想要的结果?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-6-14 14:42 , Processed in 0.045537 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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