Sub过程与程序流程控制语句
第9章 Sub过程
第9章Sub过程第9章Sub过程VBA应用程序是由过程组成的,使用Excel VBA开发应用程序就是在编写过程。
前面各章中已经多次使用到过程。
9.1 过程的分类过程是指由一组完成指定任务的VBA语句组成的代码集合。
在VBA中,可执行的代码都必须放置在过程中。
VBA中的过程可分为事件过程、属性过程和通用过程。
1. 事件过程事件过程是当发生某个事件(如单击、双击)时,对该事件做出响应的程序段。
事件过程位于对象所在模块中,例如有关工作簿的事件代码放置在ThisWorkbook对象的代码模块中。
在打开工作簿时将调用的程序代码可放置在Workbook对象的Open事件中,如图9-1所示。
2. 属性过程在“类模块”中设置类的属性值时,可通过“属性过程”来完成。
3. 通用过程有时在不同的事件过程中需要执行一段相同的代码,可以把这段代码独立出来,作为一个过程,这样的过程称为“通用过程”。
在VBA中,通用过程又分为两类:Sub(子程序)过程和Function(函数)过程。
●Sub过程:这类过程完成指定任务,执行结束后不返回值。
●Function过程:这类过程完成指定的任务,并返回一个值供调用程序使用。
一般通用过程保存在VBA的“模块”中,一个模块可以包含任意数量的过程,同时,一个VBA工程可以包括任意多个模块。
9.2 定义Sub过程在使用之前,需要先在模块中定义过程。
VBA中有两种定义过程的方法:一种方法是使用窗体创建过程的结构,再在过程中编写相应的代码;另一种方法是在模块中直接输入代码来定义过程。
】9.2.1 添加过程通用过程一般保存在模块中,在创建过程前可先通过选择“插入”ㄧ“模块”命令向工程中添加一个模块。
计算机组成原理sub指令
计算机组成原理sub指令一、引言计算机指令是计算机执行各种操作的核心,而sub指令是计算机指令系统中的一种基本指令,用于执行减法运算。
sub指令在计算机组成原理中占据着重要的地位,它不仅在数据传送、算数运算、逻辑运算等方面有着广泛的应用,而且在控制流程、地址计算等方面也发挥着重要的作用。
二、sub指令的功能与实现sub指令的功能是将两个操作数相减,并将结果存储在一个寄存器中。
在实现上,sub指令通常采用加法器来实现减法运算,即将第一个操作数加负第二个操作数来实现减法。
如果两个操作数相减的结果为正数,则表示被减数大于减数,结果存储在寄存器中;如果结果为负数,则表示被减数小于减数,需要继续执行减法操作,直到结果为正数为止。
三、sub指令的应用sub指令在计算机组成原理中有着广泛的应用。
首先,它可以用于算术运算中,例如加减法运算、比较大小等。
其次,它可以用于逻辑运算中,例如判断两个数值之间的关系等。
此外,sub指令还可以用于控制流程中,例如跳转、循环等操作。
最后,sub指令还可以用于地址计算中,例如计算内存地址等。
四、sub指令的执行过程sub指令的执行过程可以分为以下几个步骤:1.取指阶段:从内存中读取指令和操作数数据;2.译码阶段:对指令进行译码,确定指令的操作和操作数;3.执行阶段:根据译码结果执行sub指令,将两个操作数相减并将结果存储在寄存器中;4.送回阶段:将结果返回给程序计数器或寄存器等。
五、sub指令的优化为了提高计算机的性能和效率,可以对sub指令进行优化。
例如,可以采用流水线技术来减少指令之间的等待时间;可以采用乱序执行技术来提高指令执行的顺序性;可以采用分支预测技术来减少分支跳转的时间和次数等。
六、总结sub指令是计算机组成原理中的基本指令之一,它在数据传送、算数运算、逻辑运算、控制流程、地址计算等方面有着广泛的应用。
通过对sub指令的学习和理解,可以更好地了解计算机的工作原理和性能优化方法。
第9章 Sub过程
第9章Sub过程第9章Sub过程VBA应用程序是由过程组成的,使用Excel VBA开发应用程序就是在编写过程。
前面各章中已经多次使用到过程。
9.1 过程的分类过程是指由一组完成指定任务的VBA语句组成的代码集合。
在VBA中,可执行的代码都必须放置在过程中。
VBA中的过程可分为事件过程、属性过程和通用过程。
1. 事件过程事件过程是当发生某个事件(如单击、双击)时,对该事件做出响应的程序段。
事件过程位于对象所在模块中,例如有关工作簿的事件代码放置在ThisWorkbook对象的代码模块中。
在打开工作簿时将调用的程序代码可放置在Workbook对象的Open事件中,如图9-1所示。
2. 属性过程在“类模块”中设置类的属性值时,可通过“属性过程”来完成。
3. 通用过程有时在不同的事件过程中需要执行一段相同的代码,可以把这段代码独立出来,作为一个过程,这样的过程称为“通用过程”。
在VBA中,通用过程又分为两类:Sub(子程序)过程和Function(函数)过程。
●Sub过程:这类过程完成指定任务,执行结束后不返回值。
●Function过程:这类过程完成指定的任务,并返回一个值供调用程序使用。
一般通用过程保存在VBA的“模块”中,一个模块可以包含任意数量的过程,同时,一个VBA工程可以包括任意多个模块。
9.2 定义Sub过程在使用之前,需要先在模块中定义过程。
VBA中有两种定义过程的方法:一种方法是使用窗体创建过程的结构,再在过程中编写相应的代码;另一种方法是在模块中直接输入代码来定义过程。
】9.2.1 添加过程通用过程一般保存在模块中,在创建过程前可先通过选择“插入”ㄧ“模块”命令向工程中添加一个模块。
VBA开发环境中提供了一个“添加过程”对话框,通过该对话框可方便地向当前模块中添加过程。
具体操作步骤如下。
步骤1 在VBE环境中选择“插入”ㄧ“过程”命令,打开如图9-2所示的“添加过程”对话框。
使用图9-2所示对话框除了可以插入一个新的Sub过程、Function过程或属性过程,还可以设置Public或Private有效范围,并使得过程中所有的局部变量成为静态变量。
ExcelHome_VBA_培训-sub过程与程序流程控制语句
ExcelHome_VBA_培训-sub过程与程序流程控制语句sub过程与程序流程控制语句教师:ggsmart(叶枫)本课内容:sub过程与程序流程控制语句第一部分:Sub过程什么是过程:1、一个过程就是一组完成所需操作的VBA代码的组合。
2、VBA的过程主要包括“Sub过程”和“Function过程”(自定义函数)两种。
3、Sub过程不可以返回值,Function过程可以返回值。
声明Sub过程:1、录制的“宏”就是一个简单的Sub过程,使用录制宏功能只能生成Sub过程的代码。
2、Sub过程的特点:以“Sub过程名()”开头,以“End Sub”结尾;Sub过程一般保存在模块里;不返回运行结果。
3、声明Sub过程:[Public/Private][Static] Sub过程名称(参数1,参数2……..)--------public/private两个参数二选一public表明公共过程,一个工作簿所有模块的过程都可以访问这个过程;private声明为私有过程,只有同模块的过程才能访问这一过程;static表明过程结束后保存过程中的变量;sub 过程名称表明过程的开始;(参数1,参数2,…….)表明一系列的变量,过程没有参数就必须有空的括号【语句块】【Exit Sub】----在过程结束前,强制过程结束【语句块】End Sub----表示过程的结束如果没有选择public/private就默认为公共过程,也就是相当选择了public参数。
在VBA里所有可执行代码都必须属于某个过程,不能在过程里再定义过程。
一个过程不限定过程的行数,它可以有一行、数百甚至数千行…..,但是随着过程行数的增加,错误也会增加。
因此过长的代码可以分成几个子过程。
创建一些小型过程而不是一个大过程是一个非常好的编程习惯。
4、从过程执行另一个过程:输入过程名称以及参数,参数用逗号隔开。
——过程名[,参数1,参数2,…..],如果过程没有参数就可不要输入参数;在过程名以及参数前使用Call关键字,参数用括号括起来,并用逗号隔开。
excel VBA最基础入门手册
excelVBA最基础入门手册??1、什么是VBA?为什么要学习VBA??2、VBA与宏??3、VBE简介??4、对象、属性、方法、事件??5、VBA过程??6、数据类型、变量、数组、常量??7、(回复)该定义变量为何种数据类型??8、VBA的函数??9、程序流程控制:if语句??10、程序流程控制:SelectCase语句??11.程序流程控制:For—next语句??12、几个for—next循环的例子(作者:老朽??13、程序流程控制:For—Each语句??14、程序流程控制:DoWhile语句??15、程序流程控制:DoUntil语句??16、程序流程控制:Goto语句??17、用户窗体??18、再说Excel的对象模型??19、[小试牛刀]制作一个个性化的欢迎界面20、处理单元格数据(复制、剪切、删除??21、Range对象的End属性(带作业)??22、花名册分类(实例)??23、花名册汇总(实例??24、新建工作表??25、认识数组(一)??26、Worksheet的Change事件(带作业)??27、关于Application.EnableEvents属性(有实例动画)?? ??????????Application.EnableEvents补充说明??28、关于Worksheet的SelectionChange事件(有实例动画)??29、Worksheet的SelectionChange事件实例(trustwxq朋友提供)什么是VBA?为什么要学习VBA???=========??????VBA是VisualBasicForApplication的简称,具体说来,可能让叶枫三天三夜也说不完,叶枫也只知道VBA是建立在Office中的一种应用程序开发工具,其实知道这也就够了。
很懒很笨的叶枫只想吃香喷喷的大米饭,可从没想要知道大米饭是怎么来的。
??????Excel本身的内置函数其实已经很强大了,甚至有人说,只要学会二三十个函数,就已经可以满足普通用户日常的工作需求。
Sub过程
End Sub
Private Sub Form_Load()
End Sub
Private Static Sub mySub2() '模块级过程 Dim x As Integer 'x为静态变量
Sub subA(y As Integer) X = 0 '本过程级变量,未经显式声明 Print y 'y的值来自父过程中的实参
End Sub
Visual Basic 程序设
计
Sub过程
Sub mySub1(m As Integer, n As Integer) Print m, n
End Sub Private Sub Form_Load()
Call mySub1(1, 3) '过程中的形参m=1,n=3 mySub1 1, 3 Call mySub2 'VB将后面的空括号自动去掉 mySub2 End Sub Private Static Sub mySub2() Call Form_Load '调用窗体的Load事件过程 Form_Load End Sub
Sub过程
Sub过程也称子过程,是指以规定语法结构组织的、 可以被重复调用的、具有特定功能的相对独立的语句 块。 一、声明Sub过程
[Private|Public][Static] Sub 过程名([形式参数]) 过程体
End Sub 其中,Public声明全局过程,Private声明模块级过 程,默认为Public。 Static表明本过程中所有过程级变量均为静态。 使用Exit Sub语句可以使程序从Sub过程中退出。
二级VB基础教程:6.1VB的过程设计及子过程(Sub)的定义与调用
1.什么是过程
在程序设计中,为各个相对独⽴的功能模块所编写的⼀段程序称之为过程。
2.VB中的⾃定义过程分类
(1)以“Sub”保留字开始的⼦程序过程(包括事件过程和通⽤过程),不返回值;
(2)以“Function” 保留字开始的函数过程,返回⼀个值;
(3)以“Property” 保留字开始的属性过程,可以返回和设置窗体、标准模块以及类模块的属性值,也可以设置对象的值。
3.事件过程
(1)窗体事件过程
语法:Private Sub Form_事件名([参数列表])
[局部变量和常数声明]
语句块
End Sub
注意:
1)窗体事件过程名由Form_事件名组成,多⽂档窗体⽤MDIForm_事件名;
2)每个窗体事件过程名前都有⼀个Private的前缀,表⽰该事件过程不能在它⾃⼰的窗体模块之外被调⽤;
3)事件过程有⽆参数,完全由VB提供的具体事件本⾝决定,⽤户不可以随意添加。
(2)控件事件过程
语法:Private Sub 控件名_事件名([参数列表])
[局部变量和常数声明]
语句块
End Sub
注意:其中的控件名必须与窗体中某控件相匹配,否则VB将认为它是⼀个通⽤过程。
(3)建⽴事件过程的⽅法
1)打开代码编辑器窗⼝(两种⽅法:双击对象或从⼯程管理器中单击“查看代码”按钮)
2)在代码编辑器窗⼝中,选择所需要的“对象”和“事件过程”
3)在Private Sub …… End Sub之间键⼊代码
4)保存⼯程和窗体
(4)事件过程的调⽤
事件过程由⼀个发⽣在VB中的事件来⾃动调⽤或者由同⼀模块中的其他过程显⽰调⽤。
VB中Sub子过程与函数的调用
VB中Sub⼦过程与函数的调⽤在做学⽣管理系统中,遇到了太多太多的问题,发现了VB的学习是多么的不牢固,即使当初耗费了⼤量的时间。
从现在开始,将把⾃⼰遇到的那些模糊或者不懂的知识总结出来,查漏补缺,欢迎⼤家提出批评指正!VB中的调⽤主要针对Sub⼦过程和⾃定义函数的调⽤。
不论是Sub⼦过程还是函数过程,都是将⼀段完整的功能独⽴出来,建⽴⼀个过程。
在主调程序中通过调⽤过程,将需要计算的参数(实参)传递给过程;在过程中求得结果后再讲结果返回到主调程序,从⽽实现程序的功能,并使程序结构更为清晰、简洁。
⼀、Sub⼦过程的调⽤在程序中要调⽤Sub⼦过程的⽅法有如下两种:Call 过程名(实参列表)或过程名 [实参列表]调⽤Sub⼦程序的程序段称为主调程序。
在主调程序中调⽤Sub⼦过程时,将使程序流程⾃动转向被调⽤的Sub⼦过程。
在过程执⾏完最后⼀⾏语句 End Sub 之后,程序流程将⾃动返回到主调程序语句的下⼀⾏继续进⾏,如下图所⽰:在调⽤过程的的语句中,不仅要求实参个数与被调⽤过程形参个数⼀致,⽽且要求实参表的参数类型、参数顺序与被调⽤过程形参表的参数完全⼀致。
⼆、⾃定义函数的调⽤形式如下:函数名(实参列表)实参列表有变量名、数组名、数组元素名、常熟或表达式组成,在调⽤时,实参和形参的数据类型、顺序、个数必须⼀⼀对应。
如下图所⽰:函数调⽤只能出现在表达式中,其功能是求得到函数的返回值。
从上⾯两张图中可以看出,Sub⼦过程和函数过程在传递需要计算的参数时(实参a、b传递给形参x、y),两者并没有什么不同。
但在返回结果⽅⾯,因为函数过程可以通过函数名返回结果,因此,在函数过程中⼀般只需要设置接收计算参数的形参即可(图2的形参为x、y);Sub⼦过程却有所不同,由于Sub⼦过程名只代表名字,没有返回值,所以必须另外设置专门的形参⽤于返回结果(图1的形参为z1、z2)。
那么,在解决⼀个问题时,是使⽤Sub⼦过程还是使⽤函数过程呢?从原则上来说,解决⼀个问题,既可以使⽤Sub⼦过程,也可以使⽤函数过程。
plc的sub指令用法
plc的sub指令用法PLC(可编程逻辑控制器)是一种广泛应用于工业自动化领域的计算机设备,它通过执行一系列的指令来控制各种机械设备和生产过程。
在PLC编程中,Sub指令是一种常用的子程序指令,它允许将常用的程序段封装成一个独立的子程序,以便在需要时重复调用。
本文将介绍Sub指令的用法、优点、注意事项以及应用案例。
一、Sub指令的用法Sub指令用于创建一个子程序,也称为子程序块或函数/过程块。
子程序可以包含一系列的指令,用于完成特定的任务。
当调用子程序时,PLC会执行子程序中的指令,并返回一个结果。
如果子程序中有需要返回结果的指令,则需要在子程序末尾添加Return指令。
Sub指令的使用步骤如下:1. 编写子程序:首先,需要编写子程序的代码,包括指令、逻辑和变量等。
2. 保存子程序:将子程序保存到PLC中,以便后续调用。
3. 调用子程序:在主程序中需要使用子程序的地方,使用Call Sub指令来调用子程序。
4. 等待子程序执行结果:在调用子程序后,需要等待子程序执行完毕,并获取其返回结果。
二、Sub指令的优点Sub指令具有以下优点:1. 提高了编程效率:将常用的程序段封装成子程序,可以减少重复编写代码的工作量,提高编程效率。
2. 提高了可读性和可维护性:将复杂的程序分解成多个子程序,可以使程序结构更加清晰,便于维护和调试。
3. 增强了可扩展性:通过使用Sub指令,可以将一些常用的功能封装成独立的子程序,方便后续扩展和修改。
三、Sub指令的注意事项在使用Sub指令时,需要注意以下几点:1. 参数传递:在调用子程序时,需要传递参数。
需要注意参数的类型和数量,以确保子程序的正确执行。
2. 错误处理:在子程序中需要添加适当的错误处理机制,以避免出现异常情况。
3. 避免死循环:在子程序中需要合理控制循环次数,以避免出现死循环或资源占用过多的问题。
4. 避免重复操作:在子程序中需要避免对同一变量或设备进行重复操作,以避免对系统造成不必要的负担。
036 VB编程之Sub子过程
子过程也可以称为sub过程,或者通用过程,用来完成特定任务。
使用sub过程时,首先要建立它,然后才可以用其过程名来调用它。
接下来,我们一起看看如何创建一个sub过程,以及如何调用它吧。
一、创建sub子过程sub过程需要在代码窗口创建,sub过程不可以创建在其它过程内部,因此你需要在代码窗口中找一处空白的地方,开始创建sub过程。
sub过程的语法格式:说明:1,Sub关键字是子过程开始的标记,End Sub则是子过程结束的标记。
2,Exit Sub可以提前退出子程序3,private修饰符表示该sub过程为私有过程,只能在本模块中使用。
4,public修饰符,则表示为公用过程,可以在整个应用程序中使用。
5,Static修饰符,表示,该过程中所有变量均为静态变量。
6,参数是可选项,如果有多个参数则之间用逗号隔开,即使没有参数也需要在过程名后面加上括号“()”。
7,参数仅在该子过程内部有效,属于局部变量。
8,一般情况下private使用的比较多,也可以不加修饰符,则默认为私有过程。
9,参数列表需要指定数据类型,如果不指定则默认为变体类型。
10,sub子过程括号内的参数列表,实际上就相当于在过程内部定义了这些参数,可以在过程内部直接使用。
举例1:创建一个无参数的sub子过程。
需求:封装一个打印行列数为2×10的,符号为“★”号的子过程,子过程名为printStar。
代码如下:说明:1,子过程名为printStar,我们在起名时尽量有清晰的含义,以方便我们今后的使用。
2,子过程由于无需输入参数,因此过程名printStar后面的括号内没有参数列表。
3,过程内部定义的变量i和j,为局部变量,仅在过程内部有效。
举例2:创建一个有参数的sub子过程需求:封装一个可以打印任意行和列的,任意符号的子过程。
分析:由于要求打印的行数、列数和符号都是任意的,因此我们必须有参数列表,且需要三个参数。
分别为:row、col、symbol,分别用来传递行数、列数和符号,它们的数据类型分为是整型、整型和字符串型。
第05章 过程
第5章过程事件过程、通用过程(Sub过程、Function 过程)5.1 Sub过程Sub过程又称子程序过程5.1.1定义Sub过程1. 定义Sub过程的一般格式[Public|Private][Static] Sub子过程名([形参表列])<语句块>[Exit Sub]<语句块>End Sub说明:(1)Public表示该过程可在整个程序范围内被调用(默认)Private表示该过程只能在本模块中被调用(2)Static表示该过程中的局部变量是静态变量(3)过程名与变量命名规则相同(4)可以有零个或多个由逗号分隔的参数每个参数的格式为:[ByVal|ByRef] 形参名[()][As 数据类型]形参可以是变量或数组,数组名后加上一对括号省略“As 数据类型”,默认为VariantByVal传值ByRef传址(默认)(5)Sub和End Sub之间是描述过程操作的语句块,称为“过程体”例:Sub subexample2(a As Integer,ByVal b As Integer)a=a*5b=b+aPrint a,bEnd Sub2. 建立子程序的方法(1)直接输入代码(2)在“工具”菜单中选择“添加过程”项例 5.1 编写一个计算两个单精度数加减乘除的Sub子程序Private Sub subexample3(a As Single, b As Single)c1 = a + bc2 = a - bc3 = a * bc4 = a / bPrint "c1="; c1, "c2="; c2, "c3="; c3, "c4="; c4End Sub5.1.2 调用Sub过程1.用Call语句一般格式:Call 过程名([实参表列])过程没有参数,则“实参表列”和括号可以省略过程有参数,实参的个数、数据类型都要与形参一一对应2.直接使用子程序名一般格式:子程序名 [实参表列]与第一种方式相比,省略了关键字Call,去掉了“实参”的括号3.调用方法暂停当前过程,转而去执行被调用的子程序子程序执行完毕,返回调用过程继续执行例5.2调用subexample3子程序Private Sub form_Click()Dim sa As Single, sb As Singles1 = "输入对话框"sa = Val(InputBox("sa=?", s1))sb = Val(InputBox("sb=?", s1))Call subexample3(sa, sb)End Sub可以将Call subexample3(sa, sb)改为subexample3sa, sb例5.3使用两种方法调用有参数的Sub过程Private Sub ChangeForm2(intLeft As Integer, strCaption As String)Me.Left = intLeftMe.Caption = strCaptionEnd SubPrivate Sub cmd1_Click()Call ChangeForm2(0, "VB")End SubPrivate Sub cmd2_Click()ChangeForm2 1000, "Visual Basic"End Sub5.1.3 通用过程和事件过程事件过程不能由用户定义,而是由系统指定。
vb 调用sub过程
SUB过程
事件过程:当发生某个事件时对该事件做出相应的程序段。 通用过程:多个不同的事件过程可能需要使用同一段相同的程序代码, 因此把这一段程序代码独立出来作为一个过程。 通用过程分为两类:子过程(sub过程)、函数过程(function过程)
建立sub过程 过程 建立
1、定义sub过程 语句结构如下: [static][private][public] sub 过程名 [(参数列表)] 语句块 [exit sub] [语句块] End sub
通用过程与事件过程
当一个模块调用其他模块的过程时,被调用的过程必须是“公用 的”(public)
Function过程
Sub过程不返回值,可以直接作为独立的语句调用。而function过程返 回一个值,通常出现在表达式中。
建立function过程 过程 建立
定义的格式如下: [static][private][public] function 过程名 [( [(参数列表)][as 类型] )][as ] [语句块] [过程名=表达式] [exit function] [语句块] end function 说明:1、function过程以function开头,以end function结束,在两者 之间是描述过程的语句。“As 类型”是function过程返回的值的数 据类型,省略则是variant。
建立sub过程
在标准模块中建立通用过程方法: 方法1、菜单“工程—添加模块”,在对话框中选择“新建”选项卡, 双击“模块”图标,打开模块代码窗口。 执行“工具—添加过程”,在对话框中输入过程名,并设置相应的 选项。单击确定返回代码输入框输入代码。 方法2、执行“工程—添加模块”,打开代码窗口,然后输入过程的 名字。例如:sub test( ),按回车后显示: sub test( ) end sub 在sub与end sub之间输入代码
Sub子过程调用程序设计
Private Sub RndFun(m%, n%) '定义产生随机 数子过程 Dim i As Integer Dim tmp As Integer Randomize If m > n Then '确定产生随机数的上下界值 tmp = m m=n n = tmp End If Print Print "随机产生的" & m & "--" & n & "范围内 的随机整数为:" 15
8
Else s = "不能构成三角形" End If End Sub Private Sub Command2_Click() End '结束程序 End Sub
9
二、随机产生10个从下界m到一个上界n 之间的整数,并取得最大值 1. 实验目的 掌握过程嵌套调用 2. 实验内容 【实验8-2】随机产生10个从下界m 到一个上界n之间的整数,并取得最大值, 将结果显示在窗体上,要求:定义子过程 RndFun(m%,n%)实现随机数的产生,并 定义另一子过程MaxFun(m%,n%)对前者 进行调用,即:以Sub过程嵌套调用的方 法实现该程序。 10
17
三、利用子过程递归调用,通过辗转相减的 方法求得两自然数m,n的最大公约数和最 小公倍数 1. 实验目的 学会正确使用递归调用。 2. 实验内容
利用子过程GcdFun(g%,m,n)的递归调用,通过 辗转相减的方法求得两自然数m,n的最大公约数 和最小公倍数。
3.功能要求
将工程文件和窗体文件分别以缺省文件名保存在 文件夹“shiy8-3”中。
18
辗转相减求最大公约数的算法思想: (1)对于已知两数m,n,如果m>n,则 m=m-n;否则n=n-m; (2)若m=n,则m为最大公约数结束;否 则执行(1)。 递归调用的思想: m, m=n GcdFun(g,m,n)= GcdFun(g,m-n,n),m>n GcdFun(g,m,n-m),m<n
Sub过程与程序流程控制语句综述
Excel Home VBA培训班小结第四课时Sub过程与程序流程控制语句讲师:ggsmart(叶枫)学员:denkey1内容大纲:一、Sub过程二、程序流程控制语句在前面的课程中,学习了VBA的开发环境,并通过录制宏功能认识到宏这种最简单的VBA程序的学习,对宏有了较为清楚的认识。
录制宏是一个很方便也很有用的功能,特别是简单重复的操作,使用录制宏和执行宏能极大提高工作效率。
尽管如此,使用录制宏功能得到的VBA代码,仍有很多的局限性,比如:不能进行人机交互,不能进行判断、循环等,宏只是简单录制下来执行的每一个步骤语句。
显然,这远不能满足我们的需要。
那么,自己动手编写可以随意控制的程序以满足更高的需求,就是这一节课教给我的东西。
一、Sub过程1、过程过程就是一个小程序,是一组相关操作命令的组合,即一个过程就是一组完成所需操作的VBA代码的组合。
VBA中每一个程序都包含过程,且VBA的主体结构就是过程。
VBA的过程主要包括Sub过程和Function过程两种,两种过程的区别在于:Sub过程不可以返回程序运行的值,Function过程可以返回程序的运行值,即前者不可以返回值,后者可以返回值。
本次课主要学习的是Sub过程。
2、声明Sub过程录制的宏就是一个简单的Sub过程,使用录制宏功能只能生成Sub过程的代码。
在示例1中通过录制宏功能,得到如下代码:通过观察比较以上的两个宏代码,可以发现Sub过程的特点:(1)以“Sub过程名()”开头,以“End Sub”结尾;(2)Sub过程一般保存在“模块”里;(3)不返回运行结果。
声明Sub过程的语法形式为:[Public | Private | Friend] [Static]Sub过程名称([参数1,参数2……]) [语句块][Exit Sub][语句块]End Sub其中,[]中括号括起来的部分表示可选的参数,如[Public | Private | Friend]、[Static]等,这些关键字与作用的范围有关,只能选择一个,含义分别为:(1)Public表示声明的过程是一个公共的过程,即该工作簿中的其它模块中的过程也可以访问声明的这个过程;(2)Private表示声明的过程是一个私有的过程,只有在同一个模块中的其它过程才可以访问声明的这个过程。
Sub 过程
回顾:sub过程可以分为哪两种?各自有什 么特点? 1.窗体F1的装载事件过程名为: A、form_load B. F1_load 2. name为C1,caption为command1的按 钮的单击事件过程的过程名为: A、command1_click B、C1_click C. Command_click
区别:1、sub过程的过程名不兼作存放结 果的变量,没有类型。 2、function过程必须返回一个函数值,而 sub过程可以不返回值,也可以返回多个值 当sub过程需返回值时,需通过参数返回。 3、function过程调用时相当于一个函数, 而sub调用时需使用call 语句
静态过程
回顾:什么是静态变量? 当过程结束时时,加上了static关键字,则此 过程为静态过程,此时,过程中定义的局 部变量全部为静态变量。
参数传递
1、形参与实参
通用sub过程的定义和调用。 练习: 1、通过工具菜单创建一个welcome, 它能根据给定参数n,输出n遍“欢迎使 用VB” 2、在窗体的单击事件中调用welcome 过程,使其输出5遍.
两个参数的welcome. 根据参数n%和x$, 来确定输出次数和欢迎词。 分析:参数有两个,n用来指定输出次数, x用来指定输出内容。 则过程的作用为: 输出n次x$.
过程的调用: 在form_click中输出3次“ 欢迎新同学”
调用语句(主程序中) call welcome( 3, “欢迎新同学”) 调用时将实参传给形参。
Sub welcome ( n% , x$ ) For i=1 to n Print x Next I End sub
Sub过程的两种调用语句: 1、用call并加括号 使用call关键字调用过程,并在过程名 后将参数用括号括起来 例: call welcome( 5) 2、省call 也省括号 直接写过程名,空格后写参数,不加括 号。 例: welcome 3,” 欢迎新同学“
Sub过程的详细解释
]Sub过程的详细解释语法[Private | Public | Friend] [Static] Sub name [(arglist)][statements][Exit Sub][statements]End Sub* 用[]符号括起来的选项是可选的。
前面这3个[Private | Public | Friend]是同作用范围有关的。
Private表示私有,即是这个过程只能从本模块里面调用。
使用了这个的话,你从菜单"工具"->"宏"->"宏..."里看不到这个过程。
Public表示公用,这样你从其它的模块也可以访问这个公用过程。
如果前面没有任何[Private | Public | Friend]的话,过程默认是公用的。
公用的过程可以从菜单"工具"->"宏"->"宏..."里看得到。
Friend是用在类模块里面的,比较少用,就不说了。
Static是静态的意思,你可能还记得用Static声明静态变量,用它声明过程的话,表示这个过程里面声明的局部变量在下次调用这个过程时仍然保持它的值。
下面是Static声明过程的用法. 运行try1过程,然后可以在立即窗口里看到结果。
Static Sub m1()Dim i As IntegerDim j As Integeri = i + 1j = j + 1Debug.Print "i=" & i & " j=" & jEnd SubPrivate Sub m2()Dim i As IntegerDim j As Integeri = i + 1j = j + 1Debug.Print "i=" & i & " j=" & jEnd SubSub try1()Dim i As IntegerDebug.Print "静态过程:"For i = 1 To 10Call m1Next iDebug.Print "私有过程:"For i = 1 To 10Call m2Next iEnd Sub如果没有使用Public、Private 或Friend 显式指定,Sub 过程按缺省情况就是公用的。
二级计算机考试《VB》复习重点:Sub过程
二级计算机考试《VB》复习重点:Sub过程
2015二级计算机考试《VB》复习重点:Sub过程
(一)建立Sub过程
通用Sub过程的结构与前面多次见过的事件过程的结构类似。
一般格式如下:[Static][Private][Public]Sub过程名[(参数表列)] 语句块
[Exit Sub]
[语句块]
End Sub
(二)调用Sub过程
调用引起过程的`执行。
也就是说,要执行一个过程,必须调用该过程。
Sub过程的调用有两种方式,一种是把过程的名字放在一个Call 语句中,一种是把过程名作为一个语句来使用。
1.用Call语句调用Sub过程
格式:Call过程名[(实际参数)]
2.把过程名作为一个语句来使用
在调用Sub过程时,如果省略关键字Call,就成为调用Sub过程的第二种方式。
与第一种方式相比,它有两点不同:
(1)去掉关键字Call;
(2)去掉“实际参数”的括号。
(三)通用过程与事件过程
[Private|Public]Sub控件名事件名(参数表) 语句组End Sub
窗体事件过程的一般格式为:
[Private|Public]Sub Form事件名(参数表) 语句组End Sub
【2015二级计算机考试《VB》复习重点:Sub过程】。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Excel Home VBA培训班小结第四课时Sub过程与程序流程控制语句讲师:ggsmart(叶枫)学员:denkey1内容大纲:一、Sub过程二、程序流程控制语句在前面的课程中,学习了VBA的开发环境,并通过录制宏功能认识到宏这种最简单的VBA程序的学习,对宏有了较为清楚的认识。
录制宏是一个很方便也很有用的功能,特别是简单重复的操作,使用录制宏和执行宏能极大提高工作效率。
尽管如此,使用录制宏功能得到的VBA代码,仍有很多的局限性,比如:不能进行人机交互,不能进行判断、循环等,宏只是简单录制下来执行的每一个步骤语句。
显然,这远不能满足我们的需要。
那么,自己动手编写可以随意控制的程序以满足更高的需求,就是这一节课教给我的东西。
一、Sub过程1、过程过程就是一个小程序,是一组相关操作命令的组合,即一个过程就是一组完成所需操作的VBA代码的组合。
VBA中每一个程序都包含过程,且VBA的主体结构就是过程。
VBA的过程主要包括Sub过程和Function过程两种,两种过程的区别在于:Sub过程不可以返回程序运行的值,Function过程可以返回程序的运行值,即前者不可以返回值,后者可以返回值。
本次课主要学习的是Sub过程。
2、声明Sub过程录制的宏就是一个简单的Sub过程,使用录制宏功能只能生成Sub过程的代码。
在示例1中通过录制宏功能,得到如下代码:通过观察比较以上的两个宏代码,可以发现Sub过程的特点:(1)以“Sub过程名()”开头,以“End Sub”结尾;(2)Sub过程一般保存在“模块”里;(3)不返回运行结果。
声明Sub过程的语法形式为:[Public | Private | Friend] [Static]Sub过程名称([参数1,参数2……]) [语句块][Exit Sub][语句块]End Sub其中,[]中括号括起来的部分表示可选的参数,如[Public | Private | Friend]、[Static]等,这些关键字与作用的范围有关,只能选择一个,含义分别为:(1)Public表示声明的过程是一个公共的过程,即该工作簿中的其它模块中的过程也可以访问声明的这个过程;(2)Private表示声明的过程是一个私有的过程,只有在同一个模块中的其它过程才可以访问声明的这个过程。
(3)Friend用在类模块里。
(4)Static是静态的意思,表示声明的过程中的局部变量将被保存,在下次调用的时候仍保存原来的值。
蓝色部分的Sub过程名称()、End Sub是必须的,分别标明过程的开始和结束。
括号里的[参数1,参数2……]是一系列的变量,以逗号分隔将传递的参数值,如果过程没有任何参数,可以省略,如以上录制的两个宏都是没有参数的Sub过程。
[Exit Sub]表示在过程结束之前强制退出。
3、试着编写一个Sub过程新打开的VBE编辑器,在工程资源管理中的空白处单击右键,选择“插入→模块”,便新建了一个模块。
可以在同一个模块里编写多个过程,也可以保存在不同的模块中。
双击“模块1”,便可在右边的代码窗口编写Sub过程。
在模块中创建一个名为“mysub”的Sub过程如下:同时,将光标定位至代码中,点击鼠标右键,选择Smart Indent→Indent Procedure,调整代码的缩进,如图:调整后,如下:将光标定位至此代码中,点击工具栏中的“运行子过程/用户窗体”按钮,或按快捷键F5,运行此过程,弹出一个对话框,如下图:此过程中并未设定Public或Private等显示关键字,则按照缺省的情况为Public过程,即默认为公共的过程。
如果不打算公开某个过程,则要在Sub前面加Private关键字,定义为私有过程。
在刚才建立的模块中建立一个名为“siyou”的私有过程并运行如下:4、从过程执行另一个过程上面的两个过程都只有一行代码,诚然VBA并没有限定代码的行数,可以在一个过程里编写成千上万条代码,但随着代码行数的增加,错误也可能会增加。
因此,将很长的代码分拆到多个过程里,通过创建一些小型过程代替单个的大型过程,是一种很好的编程习惯。
从过程执行另一个过程共有三种方法。
(1)输入过程名称以及参数,参数用逗号隔开;过程名[,参数1,参数2,…]在刚才的模块中建立一个名为“test”的过程,调用执行“mysub”过程,代码如下:将光标定位至代码中执行此过程,便弹出刚才的第一个对话框。
或者将光标定位至上述代码中的mysub之后,点击菜单栏中“工具→宏”,选择执行名为test的宏。
注意到,上面的宏对话框中并没有名为siyou的过程,这是因为此工程是一个私有的过程。
虽然不显示,但仍然可以调用。
(2)在过程名称以及参数前使用Call关键字,参数用括号括起来,并用逗号隔开;Call过程名[(参数1,参数2,…)](3)利用Application对象的Run方法。
Application. Run表示过程名的字符串(或字符串变量)[,参数1,参数2,…]Application. Run “mysub”直接调用过程名,也可以定义一个字符串变量,并将过程名赋值,如Application. Run a。
以上为从过程执行另一个过程的三种方法,都是在同一个模块中调用,如果在其它模块中是否都能调用呢?经尝试后,发现定义为Private的过程在不同的模块中是无法调用的。
二、程序流程控制语句——判断与循环语句是过程的核心,VBA语句按执行顺序可以分为顺序结构语句、判断分支语句和循环语句。
顾名思义,顺序结构语句就是从上到下由程序的第一行执行到最后一行,如赋值和过程调用语句等,录制的宏代码也属于此类语句;判断分支语句也叫结构选择语句,是根据条件,跳过部分语句执行另一部分的语句;循环语句就是重复执行某一段语句。
本次课学习的是判断分支语句和循环语句,判断分支语句主要有If语句和Select Case语句,循环语句主要有For语句和Do 语句。
1、If语句If语句根据条件变量的不同来执行,语句形式为:If逻辑表达式Then语句块1[Else语句块2]End If可以理解为“如果…那么…[否则…]”,其中[Else]是可选部分,程序执行时,先运行“逻辑表达式”,如果为真,则执行语句块1,如果为假,则执行Else部分的语句块2,同时If语句也可以嵌套使用。
分开表述如下:(1)If-Then语句结构为:If逻辑表达式Then语句块End If可以理解为“如果…那么…”,如果逻辑表达式的结果为True,则执行语句块里的所有语句,否则执行End If后面的语句。
其中语句块可以是一句指令或多条指令,也可以调用一个或多个过程,当然也可以为空,即没有语句。
当语句块比较简单的时候,可以省略“End If”,如If逻辑表达式Then语句块此语句的执行流程可用下图表示:(2)If-Then-Else语句结构为:If逻辑表达式Then语句块1Else语句块2End If可以理解为“如果…那么…否则…”,如果逻辑表达式的结果为True,则执行语句块1里的所有语句,否则执行语句2里的所有语句。
(3)If-Then-ElseIf语句结构为:If逻辑表达式1 Then语句块1ElseIf逻辑表达式2 Then语句块2ElseIf逻辑表达式3 Then语句块3…Else语句块nEnd If可以理解为“如果…那么…否则如果…那么…否则…”,可以有多句“否则如果…”,若逻辑表达式1的结果为True,则执行语句块1,截至继续执行End If后面的语句;若逻辑表达式1的结果为False,则检查逻辑表达式2的结果,若为True则执行语句块2,接着继续执行End If后面的语句……,一直到所有结果的条件都不满足时,才执行Else后面的语句块n。
2、Select Case语句Select Case语句同If语句一样,也是条件判断的语句,其功能也可以用If语句来完成。
但是,当程序的条件太多,用If语句来判断就存在一些不足了,比如程序是否美观、是否便于阅读、程序的执行效率等。
Select Case语句在执行的效率上,比If语句要快得多,同时更加简洁明了,也更加适合设计多种选择。
而通常情况下只把If 语句用在二元判定上。
Select Case语句的结构为:Select Case测试表达式Case表达式列表1语句块1Case表达式列表2语句块2Case表达式列表3语句块3…Case表达式列表n语句块n[Case Else语句块n+1]End Select对以上结构的说明:(1)测试表达式必须为数值表达式或字符串表达式;(2)表达式列表可以是用逗号分开的表达式,也可以使用To 或Is关键字,如:Case 1, 2, 3, 4Case 1 To 4Case Is < = 4(3)Case语句后面可以使用多重表达式,各表达式的数据类型可以不相同,之间是“逻辑或”的关系,如:Case 1 To 4, “a”在执行程序的时候,不管满足于哪一个条件,都会执行相关的语句块。
首先,根据测试表达式的值进行判断,如果与表达式列表1相匹配,则执行语句块1,跳过其它Case的语句,执行End Select后面的语句;如果测试表达式的值与表达式列表1不匹配,则判断其与表达式列表2是否匹配,如若匹配,则执行语句块2,并跳过其它的语句,执行End Select后面的语句……,依次类推,如果测试表达式的值与表达式列表1—n都不匹配,则执行语句块n+1,如果没有[Case Else 语句块n+1],则直接执行End Select后面的语句。
因为Select Case语句只要执行了一个匹配的语句就会退出判断,为最大限度的提高有效性,在编写程序时应该把最有可能发生的情况写在最前面。
3、For-Next循环语句结构为:For循环变量=初值To终值[Step步长]循环体[Exit For]循环体Next[循环变量]其中[Step步长]为步长值,可以为正数,也可以为负数,但不能为0,当步长值为正数时,初值要小于终值,当步长值为负数时,终值要大于终值,当步长值省略时默认为1。
循环语句的执行次数取决于循环变量的初值、终值和步长。
[Exit For]为强制终止循环的语句,执行后将退出循环,执行Next 后面的语句。
另外,可在Next的上面一行加入语句Debug. Print i在立即窗口中查看循环变量值的变化,便于理解变量的执行过程。
循环变量是一个变量,可以在循环体中对其进行修改。
For-Next 语句的执行流程可用下图表示:4、For Each-Next循环语句结构为:For Each元素变量In对象集合语句块[Exit For]语句块Next[元素变量]和For-Next循环语句的句式基本相同,只是第一句的元素变量是用来遍历集合或数组中的所有元素的变量,它从集合或数组中的第一个元素开始,直到最后一个元素,执行语句块,然后退出循环后再执行Next后面的语句,同时可以在循环语句中加入一个或多个[Exit For]来终止循环。