ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

菜鸟谈VBA最最基础入门《原创》

    [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-8-12 21:39 | 显示全部楼层
本帖已被收录到知识树中,索引项:开发帮助和教程
程序流程控制——Select Case语句
=============================
  Select Case语句同IF语句一样,也是条件判断的语句。它的功能也可以用IF语句来完成。但是,当程序的条件太多,用IF语句来判断的话就存在一些不足了,比如程序是否美观?是否便于阅读?程序的执行效率等等。Select Case语句在执行的效率上,同IF语句相比,肯定是要快得多。

[Select Case语句的语法]
  Select Case 测试表达式
        Case 条件表达式1
              语句块1
        Case 条件表达式2
              语句块2
       Case 条件表达式3
              语句块3
       ......
       Case 条件表达式n
              语句块n
       Case Else
              语句块Else
     End Select.

当某个条件表达式与测试表达式相匹配时,则执行其后的语句块,否则执行Case Else后的语句块,然后结束Select Case块的执行。同IF语句一样,可以不要Case Else语句。
“如对A1单元格的学生成绩进行等级评定,小于等于30分的为差,30分到59分的为不及格,60分到79分的为及格,80分到89分的为良好,90到100分的为优秀。”用Select Case语句来解决就是:

  1. Sub test()
  2.   If [a1].Value = "" Then
  3.       MsgBox "A1单元格没有输入数字。"
  4.       Exit Sub '     退出程序
  5.   End If
  6.   Select Case [a1].Value
  7.       Case 0 To 29
  8.           MsgBox "差"
  9.       Case 30 To 59
  10.           MsgBox "不及格"
  11.       Case 60 To 79
  12.           MsgBox "及格"
  13.       Case 80 To 89
  14.           MsgBox "良好"
  15.       Case Else
  16.           MsgBox "优秀"
  17.   End Select
  18. End Sub
复制代码
Select Case语句.rar (6.44 KB, 下载次数: 12440)
需要补充一点的是,无论是IF语句还是Select Case语句,都是可以进行嵌套的!

[ 本帖最后由 ggsmart 于 2009-8-13 17:54 编辑 ]

评分

27

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-8-12 21:41 | 显示全部楼层
ggsmart的补充说明:楼上写的代码,我只考虑分数是整数的时候,这里我只是举个例子,目的是让大家认识Select Case语句,因为没有考虑小数和负数的情况.一旦出现29.5之类的,就都全是优秀.所以,程序本身并不全面.为此,38度OFFICE技术论坛的老朽对代码进行了修定,提供了另一段全面的代码,非常感谢!

  1.       '修订:38度:老朽
  2.       '网址:http://www.38duoffice.cn/bbs
  3.       '日期:2009-7-1 上午 11:22:21
  4. Sub Test()
  5.   If [a1].Value = "" Then
  6.       MsgBox "A1单元格没有输入数字。"
  7.       Exit Sub '     退出程序
  8.   End If
  9.   Select Case [a1].Value
  10.       Case Is < 30
  11.           MsgBox "差"
  12.       Case Is < 60
  13.           MsgBox "不及格"
  14.       Case Is < 80
  15.           MsgBox "及格"
  16.       Case Is < 90
  17.           MsgBox "良好"
  18.       Case Else
  19.           MsgBox "优秀"
  20.   End Select
  21. End Sub
复制代码

[ 本帖最后由 ggsmart 于 2009-8-16 09:24 编辑 ]

评分

21

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-8-12 21:45 | 显示全部楼层
程序流程控制——For—Next 循环语句
=============================
什么是循环?
这里我们指的循环是指重复地执行某项动作(语句块)。

同学们在操场上跑步,两万米长跑,每圈400米。“呯”,枪一响,开始跑,一圈,两圈,三圈......直到跑满50圈才停止。这里,同学们就是在循环地在操场的跑道上执行跑步的动作。

我们来看一下For—next 的句式:

  For 循环变量=初值 to 终值 step 步长
       循环体1
      [exit for]
      循环体2
  next 循环变量
      

解释:从开始到结束,反复执行For和Next之间的指令块,除非遇到Exit For语句,将提前跳出循环。其中,步长和Exit For语句以及Next后的循环变量均可省略,步长省略的时候默认为1。Exit for 语句是强制终止循环的语句,执行它后将退出循环,执行next后面的语句。
循环变量是一个变量,可以在循环体中对其进行修改,但一般就避免在循环体中对其修改。

对句式进行了初步的认识后,我们用这个句式来叙述上面学生跑步的问题。把它编成程序,20000米,要跑50圈,也就是要50次,同学们要在上面一圈,两圈。。。。直到满50圈才停止循环跑步,当然,如果你要提前退赛,就不用跑满50圈了。有了这个思想,程序可以写成:

Sub 循环跑步()
    dim 圈数 as byte

    for 圈数=1 to  50 step 1
         If 学生.要求=退赛
              exit for
         End If
    Next 圈数
End Sub

当然,这只是一个实例,帮助你对For—next语句的理解,下面我们来用一个实例来讲解For-next语句!

问题:求1到1000的自然数的和。程序编为:

  1. Sub mysum()
  2. Dim Lsum As Long, i As Long
  3. For i = 1 To 1000
  4.     Lsum = Lsum + i
  5. Next
  6. MsgBox "1到1000的自然数和为:" & Lsum
  7. End Sub
复制代码
for_next-1到1000自然数的和.rar (6.14 KB, 下载次数: 9846)

[ 本帖最后由 ggsmart 于 2009-8-16 14:09 编辑 ]

评分

15

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-8-12 21:46 | 显示全部楼层

以下代码由老朽提供

ggsmart说明:以下代码为38度OFFICE技术论坛的老朽版主提供,主要是帮助大家对VBA语句的认识.

  1. 撰写:38度:老朽
  2.       '日期:2009-7-1 上午 11:40:59
  3. Sub 求1到10000之间偶数和()
  4.     Dim I&, J&
  5.     For I = 0 To 10000 Step 2
  6.         J = J + I
  7.     Next
  8.     MsgBox "1到10000之间偶数和为" & J
  9. End Sub
复制代码

  1.       '撰写:38度:老朽
  2.       '日期:2009-7-1 上午 11:40:59
  3. Sub 求1到10000之间偶数和2()
  4.     Dim I&, J&
  5.     For I = 10000 To 1 Step -2
  6.         J = J + I
  7.     Next
  8.     MsgBox "1到10000之间偶数和为" & J
  9. End Sub
复制代码

  1.       '撰写:38度:老朽
  2.       '日期:2009-7-1 上午 11:40:59
  3. Sub 求1到10000之间奇数和()
  4.     Dim I&, J&
  5.     For I = 1 To 10000 Step 2
  6.         J = J + I
  7.     Next
  8.     MsgBox "1到10000之间奇数和为" & J
  9. End Sub
复制代码

  1.       '撰写:38度:老朽
  2.       '日期:2009-7-1 上午 11:40:59
  3. Sub 求1到10000之间奇数和2()
  4.     Dim I&, J&
  5.     For I = 9999To 1 Step -2'此句于2009年8月18日纠正
  6.         J = J + I
  7.     Next
  8.     MsgBox "1到10000之间奇数和为" & J
  9. End Sub
复制代码
感谢109楼artemis_xu朋友对以上代码的纠正!

  1.       '撰写:38度:老朽
  2.       '日期:2009-7-1 上午 11:40:59
  3. Sub 求1到10000之间能被5整除的数之和()
  4.     Dim I&, J&
  5.     For I = 0 To 10000 Step 5
  6.         J = J + I
  7.     Next
  8.     MsgBox "1到10000之间能被5整除的数之和为" & J
  9. End Sub
复制代码

  1.       '撰写:38度:老朽
  2.       '日期:2009-7-1 上午 11:40:59
  3. Sub 求1到10000之间能被5整除的数之和2()
  4.     Dim I&, J&
  5.     For I = 10000 To 1 Step -5
  6.         J = J + I
  7.     Next
  8.     MsgBox "1到10000之间能被5整除的数之和为" & J
  9. End Sub
复制代码

[ 本帖最后由 ggsmart 于 2009-8-18 12:36 编辑 ]

评分

12

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-8-12 21:47 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 moon2778 于 2021-3-11 13:23 编辑

程序流程控制——For—Each 循环语句
===============================
有了前面对循环一词的理解,这里我们不用再多说,如果你知道了For—next语句的工作原理,这里再来学习For—each循环以及下面我们接着要讲的句式,那就相当简单了,同样的工作原理。
学会了吃苹果,那么离会吃梨的道路还会远吗?
呵呵,只是开个小小的玩笑,下面我们继续,首先来看看For—Each语句的句式:

For Each 元素变量 In 对象集合或数组名称
      语句块1
      [Exit For]
      语句块2
next 元素变量


和上面For—next句式是一样的工作原理。
这里的“元素变量”是用来遍历集合或数中中元素的变量,它从集合或数组的第一个元素开始,直到最后一个元素,然后退出循环。

这里我们举个例子,把当前工作薄中工作表的名称写在A列,程序为:

  1. Sub shtname()
  2. Dim i As Integer, sht As Worksheet
  3. i = 1
  4. For Each sht In Worksheets
  5.     Cells(i, 1) = sht.Name
  6.     i = i + 1 '让写入名称的单元格下移一行
  7. Next
  8. End Sub
复制代码
for-each返回工作表名称.rar (7.52 KB, 下载次数: 11535)

[ 本帖最后由 ggsmart 于 2009-8-13 17:57 编辑 ]

评分

15

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-8-12 21:48 | 显示全部楼层
本帖最后由 moon2778 于 2021-5-21 21:27 编辑

程序流程控制——Do While语句
===========================
Do While也是循环语句,它分为两种情况,一种是把循环条件放在开头,一种是把循环条件放在结尾。

1、开头判断循环条件
    语句格式:
       Do While 循环条件
            语句块1
           [Exit Do]
            语句块2
      Loop
    首先判断循环条件,条件为真则执行Do到Loop之间的语句。

2、结尾判断循环条件
    语句格式:
        Do
            语句块1
           [Exit Do]
            语句块2
       Loop While 循环条件


      先执行一次Do到Loop之间的语句,再判断循环条件,满足条件则进行循环。
两种格式的区别:因为第二种格式是把循环体放在尾部,得先执行一遍语句再进行循环条件判断,所以,同样的条件,第二种格式的循环会比第一种多执行一次循环部份的语句。
我们用Do While语句来解决求1——1000的自然数的和的问题:

  1. Sub mysum()
  2. Dim Lsum As Long, i As Long
  3. i = 1
  4. Do While i <= 1000
  5.    Lsum = Lsum + i
  6.    i = i + 1
  7. Loop
  8. MsgBox "1到1000的自然数和为:" & Lsum
  9. End Sub
复制代码
do while1到1000自然数的和.rar (6.19 KB, 下载次数: 6392)

[ 本帖最后由 ggsmart 于 2009-8-13 17:58 编辑 ]

评分

3

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-8-12 21:48 | 显示全部楼层
程序流程控制——Do Until 语句

这个和Do While语句类似,它也有两种形式,学了Do While语句,再看这个,就可以无师自通了。下面就简单介绍下:
1、开头判断循环条件
  语句格式:
       Do Until 循环条件
            语句块1
           [Exit Do]
            语句块2
      Loop
   
2、结尾判断循环条件
    语句格式:
        Do
            语句块1
           [Exit Do]
            语句块2
       Loop Until 循环条件

       执行Do 和Loop之间的指令,直到循环条件为真时退出循环。
       直到循环条件为真时退出循环,这是Do Until 与  Do While的区别。而它两种语句格式的区别,也是第二种比第一种多执行一次循环部分的语句。

还是求1——1000自然数的问题,这次我们换用Do Untile语句:

  1. Sub mysum()
  2.     Dim Lsum As Long, i As Long
  3.     i = 1
  4.     Do
  5.         Lsum = Lsum + i
  6.         i = i + 1
  7.     Loop Until i > 1000
  8.     MsgBox "1到1000的自然数和为:" & Lsum
  9. End Sub
复制代码
do until1到1000自然数的和.rar (6.19 KB, 下载次数: 5398)
是的,你看了上面的代码,觉得和楼上我们写的代码变化并不大。这里我用的是第二种格式(结尾判断)的语句,你可以试着用第一种句式写一写,或者改一改其他的问题.这里,我只是举个例子,路还得让你自己走!

[ 本帖最后由 ggsmart 于 2009-8-13 17:59 编辑 ]

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-8-12 21:49 | 显示全部楼层
程序流程控制——Go to 语句
===========================
Go to 在英语里是什么?相信大家的英语都比我好得太多,不用多说。其实Go to 语句的作用用定两个英语单词就说明问题了,“Go to 地点”就是去到哪儿的意思。
Go to 语句是将程序转到指定的标签的语句位置,然后继续往下执行。Go to 语句通常用来作错误处理。
同样的,还是用Go to 语句来做1——1000自然数的和:

  1. Sub mysum()
  2. Dim Lsum As Long, i As Long
  3. i = 1
  4. x: '为go to 语句设置的标签,必须以英文状态下的冒号结尾
  5.    Lsum = Lsum + i
  6.    i = i + 1
  7. If i <= 1000 Then GoTo x '如果i<=1000,则程序跳到标签X处
  8. MsgBox "1到1000的自然数和为:" & Lsum
  9. End Sub
复制代码
go to 1到1000自然数的和.rar (6.34 KB, 下载次数: 10898)
注意:为Go to 语句设置的标签必须以英文状态的冒号结尾。
有人说,为了方便程序的阅读,规范程序,在程序里也避免少用Go to 语句,我很赞同,也希望你们能养成这个习惯。

[ 本帖最后由 ggsmart 于 2009-8-13 18:00 编辑 ]

评分

25

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-8-13 22:39 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
虽然现在还没学会,见到楼主这么有心,一定要顶!!!

TA的精华主题

TA的得分主题

发表于 2009-8-14 01:43 | 显示全部楼层
不错的教程,希望更多的全员来学习VBA
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-25 03:08 , Processed in 0.044266 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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