第2章vba基础知识_第1页
第2章vba基础知识_第2页
第2章vba基础知识_第3页
第2章vba基础知识_第4页
第2章vba基础知识_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

刘珺邮箱:武汉大学·计算机学院ExcelVBA程序设计第一部分Excel

VBA开发平台概述第二部分VBA基础知识第三部分Excel

VBA对象模型第四部分用户界面设计主要内容22VBA的字符集、关键字和标识符VBA的数据类型常量和变量运算符与表达式VBA流程控制语句VBA过程常用内部函数第二部分VBA基础知识(4)33VBA流程控制顺序结构

选择结构:根据不同的条件,选择执行不同的语句。If...Then...Else语句(上次课已讲)SelectCase语句循环结构For...Next语句Do...Loop语句4选择结构SelectCase语句想一想CaseIs>=80与Case成绩>=80表达的意思相同吗?为什么不同?Is>=80表示一个数值范围;后者判断True或False。右边的代码本意输出“良好生”,结果输出“合格生”复习上次课的内容5循环结构:重复执行一组语句。学习了循环结构的For…Next语句单层For…Next语句已知循环次数,建议采用For…Next语句Step

步长值指定循环变量每次增加的值If条件判断加exitfor用来提前退出所在循环语句最后要有NextFor…Next语句的嵌套For…Next语句与If语句的嵌套双层For…Next语句

复习上次课的内容6逐步跟踪执行:F8添加断点在循环语句中单独使用F8进行单步跟踪有时是非常痛苦的,可改为用断点调试与跟踪功能相配合。在想要中断的语句行前面单击,设置一个断点(红点),再度点击取消断点。可用F9键对当前行设置或取消断点本地窗口监视变量的值点击“视图”下的“本地窗口”,调出本地窗口程序调试运行时,本地窗口依次罗列出所有变量的值供参考。监视窗口与立即窗口的使用立即窗口:查看debug.print语句输出结果。监视窗口:拖动一个选取的表达式(或变量),到监视窗口中。VBE调试功能—断点与变量监视以编程求Fibonacci数列的第12项为例:在Next行设置断点,将arr(i)选中拖至监视窗口,依次按F5键,观察变量i和数组元素arr(i)的值的变化。可在本地窗口直接展开arr查看各元素的值。也可用F8键与断点配合调试断点与变量监视示例事先无法确定循环次数,但能通过某种条件的变化来实现控制循环的开始和结束,采用Do...Loop语句。作用:当(while)条件为True时,重复执行循环体语句。或直到(Until)条件变为True时,结束执行循环体。语法有条件前置和条件后置两种格式:ExitDo:强制退出循环,通常用于条件判断之后,例如If...Then。循环结构的Do...Loop语句9Do

[循环语句]

[Exit

Do]

[循环语句]Loop

[{While|Until}

条件]Do[{While|Until}

条件]

[循环语句]

[Exit

Do]

[循环语句]Loop说明:

条件前置和条件后置(循环头部条件判断与循环尾部条件判断)在Do后面设置条件判断是条件前置,特点是先进行条件判断然后依据条件决定是否进入循环体。在loop后面设置条件判断是条件后置,特点是无论条件设置为何,至少先执行一次循环体。然后依据条件决定是否继续循环。While与Until关键字当while后面的条件为true时,循环继续。为false时循环结束。Until与while意思相反。继续循环直到until后面的条件为true.谨防死循环,与For循环相比,对初学者来说Doloop循环稍不小心就会形成死循环,因此我们要从开始就要谨慎对待。死循环时,用Ctrl+Break中断程序,或者长按【Esc】键中断(死循环初期可以,如果程序已停止响应,则按Esc不起作用)注意先保存文件,再运行代码。

循环结构的Do...Loop语句10Rem如果循环体内没有i=i+1,则为死循环,‘按Ctrl+break退出死循环(笔记本+Fn),或在任务管理器关闭Excel程序。‘如果修改i的初值为1,则没有i=i+1时,可通过ExitDo退出循环体Sub高斯求和问题用do循环()DimiAsLong,sumAsLongi=0DoWhilei<100sum=sum+iIfsum>100ThenExitDoi=i+1LoopMsgBox"i="&iEndSub总结:对已知循环次数的情况,如上例,用For语句更方便。Do...Loop语句示例111有时事先无法确定循环次数,则使用Do...Loop语句更合适。'爱因斯坦长阶梯问题:'有一个长阶梯,'若每步上2阶,最后剩下1阶;'若每步上3阶,最后剩2阶;'若每步上5阶,最后剩下4阶;'若每步上6阶,最后剩5阶;'只有每步上7阶,最后刚好一阶也不剩。‘请问该阶梯至少有多少阶。(结果:119)Do...Loop语句示例212有时事先无法确定循环次数,则使用Do...Loop语句更合适。Sub爱因斯坦长阶梯()‘当条件成立,继续循环Dim阶梯AsLong阶梯=0DoWhileNot(阶梯Mod2=1And阶梯Mod3=2And阶梯Mod5=4And_

阶梯Mod6=5And阶梯Mod7=0)

阶梯=阶梯+1‘没有这行则为死循环LoopMsgBox阶梯EndSub注意:此处循环的条件是当Not后面圆括号内的值为False时(这时Not(False)为真),进行循环。反之,退出。Do...Loop语句示例213有时事先无法确定循环次数,则使用Do...Loop语句更合适。Sub爱因斯坦长阶梯2()‘直到条件成立,退出循环Dim阶梯AsLong阶梯=0DoUntil(阶梯Mod2=1And阶梯Mod3=2And阶梯Mod5=4And_

阶梯Mod6=5And阶梯Mod7=0)

阶梯=阶梯+1LoopMsgBox阶梯EndSub注意:此处进行循环的条件是Until后面圆括号内的值为False时;为True时则退出循环。将示例2改为Until条件14练习1:将示例1格式改为后置条件。(119)提示:后置条件就是将条件放在Loop后面用While关键字练习2:将示例2格式改为后置条件。提示:后置条件就是将条件放在Loop后面用Until关键字注意:对于一条Do...Loop循环语句,条件要么放在Do后面,要么放在Loop后面,不能前后两边放。Do...Loop语句课堂练习15VB中的字符串常数用循环的方法求大于0的整数的2进制数值(10进制转2进制)SubDec2Bin()'将大于0的整数转换成2进制

DimiAsLong,jAsLongDimstrAsString,strMsgAsStringi=InputBox("请输入一个大于0的整数:")j=i

DoWhilei<>0str=iMod2&str'imod2取得i除以2的余数

i=i\2'对两个数作整除,返回一个整数

LoopstrMsg=j&"的2进制数为:"&vbCrLfstrMsg=strMsg&str&vbCrLfMsgBoxstrMsgEndSubDo...Loop语句示例3练习3:在循环体内询问“放假否?”,如果回答yes,那么输出“不上课,可以玩去了。”退出循环。否则就输出“今天上课,看看明天放假否?”。然后再问“放假否?”最多问3遍,如果问3遍了,仍然不放假。就退出循环。最后用if判断到底放假了没有,放假了就输出“开心:)”,没放假就输出“不开心:(”。请编程模拟上述过程提示:用带有返回值的msgbox进行询问,用变体型变量“放假吗”接收返回值放假吗=msgbox(“放假否“,vbYesNo)Do...Loop语句课堂练习18作用

:强制退出循环语句。可以在循环中进行判断,如果需要提前结束循环则可以使用此语句。注意:Exit和Do

之间有空格,不要连在一起。举例:

Subexit_do() DimjAsLong

Dowhilej<=1000

j=j+50

Ifj>100ThenExitDo

Loop MsgBoxjEndSub最后输出的结果是多少?若条件改为whilej<100呢?用F8键逐步调试运行该过程,观察循环执行的流程。ExitDo

19SubDo_Loop循环嵌套示例()DimCheck,CounterCheck=True:Counter=0'设置变量初始值。

Do'外层循环。

DoWhileCounter<20 '内层循环。

Counter=Counter+1 '计数器加一。

IfCounter=10Then '如果条件成立。

Check=False '将标志值设成False。

ExitDo '退出内层循环。

EndIf

LoopLoopUntilCheck=False'退出外层循环。EndSub内层Do...Loop语句循环到第10次时将标志值设置为False,并用ExitDo语句强制退出内层循环。外层循环则在检查到标志值为False时,马上退出。Do…Loop语句的嵌套示例(注意:每层的循环变量不相同)20经典案例:百钱买百鸡(用穷举法,也叫试数法)100文钱买100只鸡,公鸡5文1只,母鸡3文1只,小鸡1文3只,必须3种鸡最少各有一只,1文钱不可再分割。用双层循环实现外循环变量用cock,从1到20(最佳值19)内循环变量用hen,从1到33(最佳值31)chicken=100-cock-hen内循环体内加if条件判断,满足条件就输出。(3组结果)

循环嵌套的经典案例21先用For…Next语句嵌套实现该经典案例。Sub百钱买百鸡_for()

DimcockAsLong,henAsLong,chickenAsLong

Forcock=1To20

'外循环执行1次

Forhen=1To33

'内循环执行所有次---整个

chicken=100-cock-henIfcock*5+hen*3+chicken/3=100Then_

MsgBox"公鸡有"&cock&"只"&vbNewLine_&"母鸡有"&hen&"只"&vbNewLine_&"小鸡有"&chicken&"只"NextNextEndSub

用For…Next循环嵌套实现22练习4:试着用双层Do...Loop循环嵌套改写“百钱买百鸡”案例。并作为第6周上机作业提交。提示:注意Do与Loop要成对出现,缩进格式,同一语句中两者左对齐。注意对内、外循环变量的值的修改,包括两点:循环语句前给循环变量赋初值循环体内每次对循环变量加1特别要思考内循环变量赋初值的语句(hen=1)应放在何处?外循环语句的循环体内,还是外循环语句前?内循环语句前,还是内循环语句后?(说明:两种情况都可以,但放在前面写,执行流程更清楚。)

Do...Loop循环嵌套的课堂练习23Foreach…Next循环foreach循环通常是在对象中遍历。放在后面讲对象的章节中介绍。While…Wend循环老的VB语法循环,现已淘

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论