菜鸟谈VBA最最基础入门01 - 图文

更新时间:2023-10-20 14:59:02 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

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

昵称:叶枫

如果你是学习Excel的朋友,对VBA这个概念不陌生吧?

VBA的功能实在太强大,可初学的我们,面对那一串串尤如外星文的代码,你是不是看得头昏脑胀?想学,是不是却茫然得找不到入口?

在这里,我把我自己的学习心得和笔记放出来,和大家一起分享交流,一起学习,共同进步。对了,还要告诉大家,我也是初学者,不是高手,如果有什么说得不对的,希望大家及时指出。我的目的不是教学,而是期望创造一个有你,有我,有他的学习氛围! 开始吧,记住一个共同的目标——掀开那层神秘的面纱,看看VBA的真实面目。 -

什么是VBA?为什么要学习VBA?

=========

VBA是Visual Basic For Application的简称,具体说来,可能让叶枫三天三夜也说不完,叶枫也只知道VBA是建立在Office中的一种应用程序开发工具,其实知道这也就够了。很懒很笨的叶枫只想吃香喷喷的大米饭,可从没想要知道大米饭是怎么来的。

Excel本身的内置函数其实已经很强大了,甚至有人说,只要学会二三十个函数,就已经可以满足普通用户日常的工作需求。

那我们为什么要学VBA?

是的,如果只需要满足一些普通的工作需求可能永远也不会用到VBA,但在实际应用的过程中,人们的操作却越来越大,需要也越来越高,这时候就需要用VBA来对Excel进行二次开发了,VBA可以有效地自定义和扩展Excel的功能。

但有一点叶枫想要告诉大家,VBA功能很强大,但并不是万能的,也并不是所有工作都需要用VBA来解决,也并不是所有工作用VBA来解决都会很简单,这要根据实际情况而定,有些工作你用VBA来解决的话相反会变得很麻烦。

VBA与宏

======

刚开始的内容听起来很枯燥,请大家不要分心,耐着性子看下去,兴趣总是慢慢积累的。 ------------------------------------------------------------------------------ 1、亲自动手,录制一段属于自己的宏

提到VBA,相信很多人想到的就是宏,但是VBA与宏是不是一回事?我觉得它们不是一回事,但这不重要,我们要做的是先来认识一下宏。 宏是什么?

我理解的宏是一系列固定动作的集合,这个集合当遇到让他执行的条件后就逐个执行。

有人把我们录制的宏比喻成一个武术运动员在比赛中练就的一段武术套路动作,这个套路遇到一定的条件(比赛)就执行。

好了,别闲着,动一动你可爱的右手,点点鼠标,打开一个Excel文件,录制一段宏来来研究研究,步骤如下:

(1)选中任意一个单元格;

(2)打开菜单—>工具—>宏—>录制新宏,调出宏录制对话框,输入宏名(mysub),确定; (3)设置单元格字体为仿宋体,红色; (4)点击停止录宏。

这样,一个简单的设置单元格格式的宏就录好了。

-------------------------------------------------------------------------------------------------------------------

2、鼠标点一点,宏给单元格换新装 下面我们来执行这段宏。

(1)选中需要设置的任意单元格或单元格区域(为了看出效果,单元格最好有字符); (2)打开菜单—>工具—>宏—>宏,显示“宏”对话框(快捷键:Alt+F8); (3)选择我们刚才录制的宏,单击“执行”。

这样我们看到已经为刚才选中的单元格的字体已被修改成仿宋体,红色。自己动手试着录制几段宏,再执行一下,加深印象。

神奇了吧?以后当你再需要一遍又一遍地重复若干相同的操作的时候,会不会想到让宏来替你做这一切?这是一个不错的奴隶,不用花钱,且不用开工资,赚了吧? 好了,收起你贪婪的笑容,继续往下看。

宏是什么?现在相信你能想出一千种说法,由你了,又笨又懒的叶枫可没你聪明,也不再多说。 上面说的执行宏的过程是不是让你感觉很麻烦?希望用快捷键来控制宏?这个我们可以在录制宏之前在录制宏对话框里进行设置。也可以在录制宏后进行设置,按Alt+F8显示宏对话框,单击“选项”,在“宏选项”对话框里进行设置

--------------------------------------------------------------------------------------------------------------

3、寻根问底,找到宏的老窝

如果你忘记了,请你再打开宏录制对话框,在宏名的下面,有一个“保存在”的选项,点一点下拉的箭头,我们可以看到,宏可以保存在三种不同的位置,分别是:

(1)当前工作簿(系统默认):宏保存在当前工作薄的模块里,只有当该工作薄打开时,宏才起作用。

(2)新工作簿:新建一个工作薄保存。

(3)个人宏工作簿:这是为宏而设计的一种特殊的具有自动隐藏特性的工作簿,如果你要让某个宏在多个工作簿都能使用,那么就应当创建个人宏工作簿,并将宏保存于其中。

上面我们录制的宏是保存在当前工作薄里,今天我们在这里也只介绍保存在当前工作表里的宏。 --------------------------------------------------------------------------------------------------------

4、拨开层层迷雾,查看庐山真面目

宏靠什么来控制Excel的运行?是不是感觉深在浓浓的迷雾里,感觉一头雾水?让我们鼓一鼓劲,拨开它的衣服,开开那家伙里面到底是什么? (1)按Alt+F8快捷键打开“宏”对话框;

(2)选择我们刚才录制的宏,点“编辑”按钮。

眼前一亮吧?这是一个新的天地——VBA的编辑器窗口(VBE),这个我们以后再说,先将注意力集中到显示的代码上。代码如下:

1. 2. 3. 4. 5.

Sub mysub() ' mysub Macro

' 宏由ggsmart录制,时间: 2009-2-27' With Selection.Font

.Name = \仿宋_GB2312\

6. .Size = 12

7. .Strikethrough = False 8. .Superscript = False 9. .Subscript = False 10. .OutlineFont = False 11. .Shadow = False

12. .Underline = xlUnderlineStyleNone 13. .ColorIndex = xlAutomatic 14. End With

15. Selection.Font.ColorIndex = 3 16. End Sub

复制代码

现在你可能感觉到上面这些乱七八糟的代码会很陌生,甚至在问自己是不是来到外星人的世界,反正叶枫当初是这样感觉的,但不要为此感到害怕,将来我们会慢慢熟悉他,就像闭上眼睛也能准确地将那个又大又红的苹果送到自己的嘴里。

--------------------------------------------------------------------------------------------------------

5、再进一步,给宏安上门铃

一遍一遍地在宏对话框里选择宏名称,按“执行”按钮来运行宏的麻烦是不是让你郁闷得有些想吐血?指定快捷键虽然方便,但别人用自己的工作表时能不能快速上手?就算是自己,如果宏多了,或是放的时间长了,你还记得哪个快捷键控制哪个宏?

作为excel开发者,一个主要的目标是为自动化提供一个易于操作的界面,“按钮”是最常见的界面组成元素之一,我们可以把宏指定给特定的按钮,通过按钮来执行宏,还是用刚才我们录制的那个宏来举例。通过使用“窗体”工具栏,可以为工作簿中的工作表添加按钮。在创建完一个按钮后,可以为它指定宏,然后你的用户就可以通过单击按钮来执行宏。在本练习中,将创建一个按钮,并为它指定一个宏,然后用该按钮来执行宏。具体步骤如下:

(1)打开菜单—>视图—>工具栏—>窗体,调出窗体工具栏。

(2)单击”窗体“工具栏中的“按钮”控件,在工作表中希望放置按钮的位置按下鼠标左键,拖动鼠标画出一个按钮,松开鼠标后,Excel会自动显示“指定宏”对话框。

(3)从“指定宏”对话框中选择“mysub”,单击“确定”。这样,就把该宏指定给命令按钮。

课间休息,插播一段广告:按钮,工作表等这些对象就像是Excel的众多儿女,儿女太多,怎么称呼这群儿女也是一个问题.为了不出现叫"儿子"就七八个一起跑出来,同许多农村父母给儿女起"老大,老二,老三??"的称呼一样,Excel也用这种顺序的起名方法给这些儿女贴上了标签.比如第一个按钮是"按钮一",再画一个就是"按钮二",然后是"按钮三","铵钮四"等等.这样,以后你要叫第三个儿子的时候直接叫"按钮三"即可.如果你嫌这个名字乡下味太浓,如果你嫌这个名字不能很好地反映点击它后会执行怎样的操作不清楚,你可以通过双击按钮表面激活它,可重新为按钮贴上合适的显示标签.需要提醒你的是,这里的标签只是它显示在你面前的样子,实际上它是什么名字?我们可以点击它,看一下名称框里是什么.

为什么显示出来的是一样,而实际的名字却是另一样呢?也许你现在会感到迷茫,但不用管它,以后当我们学习了属性后,一切就自然明白了.

下面我们来试一试用按钮操作: (1)选择单元格或单元格区域;

(2)单击按钮。

按钮就像装在楼下的门铃,美丽的嫦娥仙子家住在502,猪八戒来到楼下,找准号码502,轻轻一按,“叮咚,叮咚??”,嫦娥在楼上就给八戒开门了,八戒不用在楼下大声地喊“嫦娥,开门。”也不用花两毛钱给嫦娥打个电话,当然更不用顺着下水管从墙上爬进嫦娥的窗户,方便而实在吧?

这种遥控式的命令的确能让繁琐的操作变得简单而方便,让我们获得了一些使用Excel标准命令所不能实现的功能。如果你是八戒,当你熟悉了如何使用这种遥控一样的门铃以后,你可能都会奇怪自己当初在没有门铃的情况下,那段漫长的爬下水管道的日子是怎么熬过来的。

让嫦娥仙子开门的方法有很多种,同样执行宏也有多种方法可以选择,我们还可以把宏指定给图片,自选图形,这些比较简单,和指定给窗体按钮是一样的,同时我们还可以把宏指定给某个“事件”,比如单击工作表,双击工作表,激活工作表,打开工作簿等等,你要安什么要的门铃,选什么样的音乐,随你了。

需要强调一点的是,我们刚说的“事件”是一个重要的概念,八戒按门铃,就是一个“事件”,这个“事件”引发了嫦娥的开门,只有门铃响了,嫦娥才会去开门。除此而外“方法”“对象”“属性”都是接下来我们会经常接触到的,慢慢走,留心点,一路上将会精彩不断。

----------------------------------------------------------------------------------------------------------- 6、小结

到这里,我们对宏应该有一个简单的了解了吧?宏实际上就是一个简单的VBA的Sub过程,它保存在模块里,以Sub开头,以End Sub结尾,执行时就从第一句逐句执行,直到End Sub结束。就像前面我们说的武术运动员练的那段套路动作,总是抱拳,扎马,出拳然后踢腿,永远不可能没有扎马就出拳,没有出拳就踢腿。我们今天录的这段宏也总是先设字体,再改字体颜色,这种顺序永远不会乱。

说完这些,你是不是感觉这些操作古板得没有生气?是不是感觉这宏的操作不能满足自己的需求? 叶枫想告诉你的是,宏代码绝不等于VBA,它只是VBA里最简单的运用,尽管许多Excel过程都可以用录制宏来完成,但是通过宏代码还是无法完成许多的工作,如: (1)不可以建立公式,函数; (2)没有判断或循环的功能;

废话说完,再回到问题里:

要达到问题的目的,我们只需要在已给我们列出的两段代码中间加入需要进行操作的代码就可以了,这里我们需要的是一个对话框来提醒,对了,还记得Msgbox吧? 输入代码:

1. MsgBox \你现在激活的工作表名称是:\

复制代码

上面的代码相信你应该能看懂吧?

&和我们工作表里的函数是一样的,连接文本的作用,Activesheet.name是当前活动工作表的名字(用了一个name属性)。

回到工作表,激活你刚才设置代码的工作表,如果你刚才设置的工作表是激活状态,请选择其他工作表,然后再重新激活它,看看你看到了什么?

看一下上面的代码,对象和事件之间用什么来分隔?还是不是点?

千万别懒,一定要动手,换其他的事件或其他的对象试一试,试着用代码改一下其他对象的属性,在单元格里添加点什么东西,这些随你了,你可千万别说你不知道哪些事件是干嘛用的。 别忘记,抹黑代码,按

F1,再重复一遍,这是一件好武器,一般人我不告诉

他.

VBA过程

================

一个过程就是执行某些动作的代码组合。

VBA过程分Sub过程和Function过程。

1、Sub过程总是以“sub 过程名()”开头,以“End Sub”结尾,一个过程就是执行某项动作的一套指令,Sub过程不返回运行的结果。

2、Function总是以“Function 程序名()”开头,以“End Function”结尾,和Sub过程的区别是Function过程返回程序运行的值,值可以是一个值或一个数组,就像我们的工作表函数,Function过程也就是我们说的自定义函数。

在这里,叶枫主要要给大家讲的是Sub过程,Function过程如果需要的话,在后面我们再讲。 好了,今天已经讲得够多了,你对VBA应该已有一个简单的认识了吧?

要设计一个过程,其实很简单,把需要的对象收集起来,看看我们要对他们的属性进行怎样的修改?我们需要做什么?需要用什么样的方法?要用哪些事件?收集起来就是一个完整的过程。

只要你肯动手,一定会觉得很简单,你不要被那一大堆的对象、属性、方法和事件给吓晕了,完全不必全部记住它们,需要的时候知道在哪里找就行,而代码也不必一个一个的去输入,还记得前面一贴

我们说的录制宏吗?当你需要进行某项操作的时候,不妨先录一段宏,但是宏是呆板的,有许多我们不需要的东西,给它修修枝,剪剪叶,整理整理,一个程序就OK了。

同时,建议你在VBE窗口中,单击“工具——选项”,在弹出的“选项”对话框里勾选“自动列出成员”。

设置好后,试着在代码窗口里输入点代码,看看,有什么?呵呵......,不用我说了,对于初学的我们,很需要它吧?

了解了对象,属性,方法及事件后,猪八戒按门铃开门的过程我们都可以把它写成程序:

Sub 门铃_单击()

如果 嫦娥.位置=在家 那么 门.开 End sub

上面这个并不是真的程序,但都有了程序的思想了,程序里,事件、对象、属性及过程都有了,你能找出来吗?

多尝试,温故知新,你可以想着用程序去解决一些你在使用Excel过程中遇到的问题,每一个问题的解决,你都会发现自己得到了很大的进步.

好了,还是那句话,路在脚下,继续走,精彩会慢慢为你上演,让我们一起努力,共同进步。 在上面,我们简单介绍了VBA的开发环境、几个常用的窗口,并对对象、对象的属性、对象的方法、对象的事件等概念作了简单的介绍,贴子大家认真看了吗?有没有一点点的收获?学习成绩如何? 什么是对象?什么是集合?什么是属性?什么是方法?什么是事件?如何正确地表示它们? 这些,你都能回答了吗?

先沉思三秒钟,如果你不能回答,那请赶快回过头去,再看一遍,我们说VBA是采用面向对象的程序设计方式,这些都是很重要的概念,如果不弄清楚,实际应用时,你可能会感到手忙脚乱。 如果已经掌握了,那让我们一起继续本贴的内容。 这次,我们将继续单调的基本功练习,讲一些VBA里面的关键字,为程序设计打下基础,还是那句话,希望你不要嫌内容的单调,一口你永远也吞不下一个大胖子,学习是一个循序渐进的过程。 ------------------

数据类型、变量、常量、数组

====================

VBA的主要目的是什么?不用说了你也知道,当然是处理数据。某些数据存在于对象中,如工作表的单元格区域里,某些数据存在于我们自定义的变量中。

-------------------------------------------------------------------------------------- 1、数据类型

数据类型告诉计算机如何将数据存储在内存中,如以整数、字符串、日期等。 数据类型是变量的特性,数据类型包括:

数据类型 Byte Boolean Integer Long(长整型) Single (单精度浮点型) Double (双精度浮点型) Currency 8 个字节 (变比整型) 没有小数点时为 +/-79,228,162,514,264,337,593,543,950,335,而Decimal 14 个字节 小数点右边有 28 位数时为 +/-7.9228162514264337593543950335;最小的非零值为 +/-0.0000000000000000000000000001 Date Object String (变长) 8 个字节 4 个字节 10 字节加字符串长度 100 年 1 月 1 日 到 9999 年 12 月 31 日 任何 Object 引用 0 到大约 20 亿 从 -922,337,203,685,477.5808 到 922,337,203,685,477.5807 存储空间大小 1 个字节 2 个字节 2 个字节 4 个字节 4 个字节 0 到 255 True 或 False -32,768 到 32,767 -2,147,483,648 到 2,147,483,647 负数时从 -3.402823E38 到 -1.401298E-45;正数时从 1.401298E-45 到 3.402823E38 负数时从 -1.79769313486232E308 到 8 个字节 -4.94065645841247E-324;正数时从4.94065645841247E-324 到 1.79769313486232E308 范围 String(定长) Variant(数字) Variant(字符) 用户自定义 字符串长度 16 个字节 22 个字节加字符串长度 1 到大约 65,400 任何数字值,最大可达 Double 的范围 与变长 String 有相同的范围 所有元素所需数目 每个元素的范围与它本身的数据类型的范围相同。 (利用 Type)

-------------------------------------------------------------------------------------- 2、变量

变量是用于保存在程序运行过程中需要临时保存的值或对象。就相当于我们在操作工作表的时候插入的辅助单元格、辅助列或辅助表一样。

同工作表的单元格一样,变量可以接纳很多种的数据类型,如其名,程序运行后,变量的值是可以改变的。

如何定义变量?

定义变量可以使用Dim语句:

Dim 变量名 As 数据类型

变量名有一定的命名规则,这里我就不详细说明了,需要提醒的是在程序的设计过程中,你可能会定义很多的变量,为了阅读及修改程序的方便,你定义的变量名尽量能让人一看就明白这个变量具体代表的是什么。在Dim语句中,我们可以不必声明变量的数据类型,直接输入“Dim 变量名”此时定义的变量将被指定为Variant类型。

但我们在程序设计的过程中,一般应该明确数据的类型,这是一个好的编程习惯,因为指定数据类型后会提高程序的运行速度。

我们可以在模块中输入“Option Explict”作为第一句语句来强制声明所有变量。也可以点“工具——选项”,在选项对话框里勾选“要求声明变量”。这样,VBA在遇到没有声明的变量名称,该语句将导致程序停止。

定义变量除了可以使用Dim语句外,比较常的还有:static语句,Private语句,Public语句。使用不同的语句定义的变量不同的是它们的作用作用域不同,具体为:

(1)如果在一个过程中包含了一个Dim或Static语句,此时声明的变量作用域为此过程,即本地变量。

(2)如果在一个模块的第一个过程之前包含了Dim或Prvate语句,此时声明的变量作用域为此模块里所有的过程,也就是在此模块里所有的过程都可以使用它,即模块作用域下的变量; (3)如果在一个模块的第一个过程之前包含了Public语名,此时声明的变量作用域为所有模块,即公有变量。

变量的作用域是指变量保留其值的这段时间,也称为变量的生成周期,它决定变量可以用于哪个模块或过程中。

给变量赋值

用等号(=)是VBA里的赋值运算符。

比如我们把\我在学习VBA变量!\这个字符串赋给变量A,则直接输入:

A=\我在学习VBA变量!\

对了,你可以在立即窗口里试一下逐条输入:

A=\我在学习VBA变量!\ Mgbox A

看一下效果。

注意,在VBA里文本是要用英语引号引起来的,还有日期要用#号,比如将日期2009-3-10赋给变量A,则为:

A=#2009-3-10#

-------------------------------------------------------------------------------------- 3、常量

执行过程时,变量的值会发生改变,所以我们称它为“变量”,但有时候我们需要引用不会发生变化的数据,这就是常量。常量声明后,不以对它进行再赋值。 声明常量设定常量的值,需要用Const语句:

Const 常量名 As 数据类型 = 常量的值

-------------------------------------------------------------------------------------- 4、数组

除了变量和常量以外,数组也是我们常用到的。

什么是数组?

数组是具有相同数据类型并且共享一个名字的一组变量的集合。数组也是变量。 数组中的元素通过索引数字加以区分。

如何声明数组?

可以用Dim语句或者Public语句声明数组。

Dim/Public 数组名 (a to b) as 数据类型

a 和b 是数组中元素的个数,数组元素素最小值为a,最大值为b,元素个数为(b-a+1)个,当然,你也可以直接输入个数,此时默认最小索引号为0。

如: Dim myarr(5) As Integer

这个数组的最小元素索引号为0,元素个数为6。

上面定义的只是一维数组,你还可以定义二维、三维、四维??.

如: Dim myarr(1 to 5,1 to 10) As Integer 这就是一个二维数组,元素个数为5*10=50个。

在程序设计的过程中,定义数组的时候我们可能不能确定数组的元素个数,对数组进行声明后,可以在运行时用ReDim语句重新指定数组的大小。

--------------------------------------------------------------------------------------

今天的这一部分内容实在很枯燥,连叶枫都有点耐不住了,拉拉杂杂说了这么多,也不知道你看出点门道没?同前一贴讲的内容一样,这些基础都是非常重要的,多读几遍,扎好马才能修练更高深的武功,千万别嫌这个过程的漫长。

一个让你心仪的女孩子,想牵上她的小手,徜徉在公园里的林荫小道上,先前的送花、打电话等等那一串串巴结的行动你会不会嫌太漫长?

VBA不像函数那样直面我们,它躲在Excel的背后,像一个“养在深闺未得见”的美丽姑娘,她飘在墙角的那缕模糊却美丽的身影对我们充满了诱惑,现在我们正在想法设法寻找她的联系电话,要想成功俘虏她,这一步能少吗?

看的没有动的快,动手操作才是学习的正确方法。发现问题,解决问题,这岂不是一个快乐的过程。

有人问:如何知道该定义变量为何种类型?

===========

这就要根据你的实际需要,再结合各种数据的的范围来看。 在编写程序的过程中,选择需要存储空间尽量小的数据类型来保存所需要的数据,这是很有必要的,虽然我们可以把变量设为Variant型,但上面我说了,定义变量类型会提升程序的运行速度,这也是VBA提供各种数据类型存储空间的原因。

该定义变量为哪一种类型?看一看它的长度。 用生活中的一个实例来说这个问题:

有一天你上街去买一斤菜油,我们需要选择一个容器来装我们所要买的菜油(相当于声明变量的类型),如果我们没有选择选择容器,上帝可不知道你要买多少斤菜油,他就扔给你一个超级大的水缸,这个水缸无论你要买多少菜油都是可以装得下的。可是携带这样一个水缸上街你会不会觉得太不方便了?用一个水缸来装一斤菜油会不会太浪费了?所以我们得自己选择一个瓶子去装我们的油,一斤油,用一个瓶子刚好合适,当然,如果你只用一个茶杯去装,那也是不行的。

用数据来打比方,我们需要用变量来保存一个学生某学科考试成绩的分数,那么用Byte数据类型就可以了(它的范围是0——255),如果在这里使用Integer、Long、Single这些数据类型的话,就相当于我们用水桶,水缸去装那一斤菜油,只是对计算机存储空间的浪费,当然,如果你的值的范围超过了Byte的范围,那定义成Byte也是不行的。

定义变量的类型时,除了考虑长度外,还要考虑变量的值的类型。

买油的时候不管是用瓶子还是用水缸,反正都能装回来,但是如果你用麻袋能不能装那一斤油回来? 还是那句话,如果你没有定义变量类型或定义变量类型为Variant,聪明的计算机会先看你打的油是固体还是液体,是液体的话把麻袋扔在一边,给你弄口大缸子。但是如果你自己选择麻袋上街去买油,你还能不能把你的油带回来?

用数据来打比方,如果你定义了一个变量为Integer型,那你再用把学生姓名的字符串赋给它,行吗?

1. Sub mysub()

2. Dim a As Integer

3. a = \我在学习VBA变量\

4. MsgBox a 5. End Sub

复制代码

将这个过程提制到模块里,按F5运行它,看看是什么结果?尝试修改一下定义的数据类型,看看修改后的运行结果!

VBA函数

=========

用Excel的时间相信你也不短了,什么是函数就不再细说了。

与其他编程语言一样,VBA含有各种内置的函数。很多的VBA函数都与Excel的工作表函数类似,或者一样。

使用VBA函数的的方式与使用工作表公式中函数的方式相同,在VBA代码中,我们可以使用很多Excel的工作表函数,例如Sum,Abs等。 例如:

1. 2. 3. 4. 5.

Sub myabs()

a = InputBox(\请输入数值:\提示\ labs = Abs(a)

MsgBox \你输入的值的绝对值为:\ End Sub

复制代码

这是一个求绝对值的过程,通过InputBox提示用户输入一个数值给变量a,再用Abs函数求出变量的绝对值,最后通过MsgBox返回结果。

InputBox同MsgBox函数一样,是很常用的函数,关于它的功能及用法,请用绝招:抹黑,按F1,

但并不是所有的工作表函数在VBA里都可以直接调用,但由于WorksheetFunction对象包含在Application对象中,如果我们要在VBA语句里使用某个不能直接调用的工作表函数,只需要在函数名称前加上Application.WorksheetFunction语语即可。 如:在VBA里使用counta函数则代码为: application.worksheetfunction.counta(range(\

VBA里面的函数很多,可以简化我们的计算和操作,功能强大啊。但当你面对那一堆英文字母,是否为该怎么记住它们感到晕菜?有人对我说,记住常用的几个,其他的不用记那么清楚,有个模糊的印向,用时再翻Help,知道在哪里找就万事OK了。我觉得这个方法很好,现转送给你! 控制程序的流程,有判断、分支和循环三种语句。 接下来我们将一样一样地进行讲解。

=====================

程序流程控制—>if语句

==================== 1、if—then语句

这个句式相当于中文里面的“如果.......那么”。

格式:

if 逻辑表达式 then

语句块 end if

解释:如果逻辑表达式的结果为true,则执行语句块里的所有语句,否则执行end if后面的语句。语句块可以是一句指令或多条指令,也可以调用一个或多个过程,当然,也可以为空,就是没有语句。 如:要判断A1单元格是否已输入内容,设计程序:

1. 2. 3. 4. 5.

Sub test1()

If [a1] = \

MsgBox \单元格没有输入任何内容!\ End If End Sub

复制代码

2、 if—then—else语句

这个语句相当于中文里面的“如果......那么......否则......”句式。 格式:

if 逻辑表达式 then

语句块1 else

语句块2 end if

解释:如果逻辑表达式的结果为true,则执行语句块1里的所有语句,如果逻辑表达式的结果为Flase则执行语句块2里的所有语句。

如:要判断A1单元格是否已输入内容,设计程序:

1. 2. 3. 4. 5. 6. 7.

Sub test2()

If [a1] = \

MsgBox \单元格没有输入任何内容!\ Else

MsgBox \单元格已经输入了内容!\ End If End Sub

复制代码

3、if—then—elseif语句

这就相当于中文里面的若“如果?那么?否则如果?那么?否则”语句,当然,可以有多句“否则如果.......” 格式:

If 逻辑表达式1 Then

语句块1

ElseIf 逻辑表达式2 Then 语句块2

ElseIf 逻辑表达式3Then

语句块3 ? Else

语句块n Eed If

解释:若逻辑表达式1的结果为True,则执行语句块1,接着继续执行EndIf后面的语句;若逻辑表达式1的结果为False,则检查逻辑表达式2的结果,若为True则执行语句块2,接着继续执行EndIf后面的语句.......一直到所有结果的条件都不满足时,才执行Else后面的语句块n。 如:要判断A1单元格的数是否能被2、3、5其中之一整除,设计程序:

1. Sub test3()

2. If [a1] = \

3. MsgBox \单元格没有输入任何内容!\4. ElseIf [a1] Mod 2 = 0 Then

5. MsgBox \单元格的数能被2整除!\6. ElseIf [a1] Mod 3 = 0 Then

7. MsgBox \单元格的数能被3整除!\8. ElseIf [a1] Mod 5 = 0 Then

9. MsgBox \单元格的数能被5整除!\10. Else

11. MsgBox \单元格的数不能被2、3、5其中之一整除!\12. End If 13. End Sub

复制代码

程序流程控制——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语句来解决就是: Sub test()

If [a1].Value = \

MsgBox \单元格没有输入数字。\ Exit Sub ' 退出程序 End If

Select Case [a1].Value Case 0 To 29 MsgBox \差\ Case 30 To 59

MsgBox \不及格\ Case 60 To 79

MsgBox \及格\ Case 80 To 89

MsgBox \良好\ Case Else

MsgBox \优秀\ End Select End Sub

1. '修订:38度:老朽

2. '网址:http://www.38duoffice.cn/bbs 3. '日期:2009-7-1 上午 11:22:21 4. Sub Test()

5. If [a1].Value = \

6. MsgBox \单元格没有输入数字。\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

程序流程控制——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. 2. 3. 4. 5.

Sub mysum()

Dim Lsum As Long, i As Long For i = 1 To 1000 Lsum = Lsum + i Next

6. MsgBox \到1000的自然数和为:\7. End Sub

以下代码由老朽提供

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

1. 2. 3. 4. 5. 6. 7. 8. 9.

复制代码

1. 2. 3. 4. 5. 6. 7. 8. 9.

复制代码

1. 2. 3. 4. 5. 6. 7. 8. 9.

复制代码

1. 2. 3. 4.

'撰写:38度:老朽

'日期:2009-7-1 上午 11:40:59 Sub 求1到10000之间奇数和2() Dim I&, J&

'撰写:38度:老朽

'日期:2009-7-1 上午 11:40:59 Sub 求1到10000之间奇数和() Dim I&, J&

For I = 1 To 10000 Step 2 J = J + I Next

MsgBox \到10000之间奇数和为\End Sub

'撰写:38度:老朽

'日期:2009-7-1 上午 11:40:59 Sub 求1到10000之间偶数和2() Dim I&, J&

For I = 10000 To 1 Step -2 J = J + I Next

MsgBox \到10000之间偶数和为\End Sub

撰写:38度:老朽

'日期:2009-7-1 上午 11:40:59 Sub 求1到10000之间偶数和() Dim I&, J&

For I = 0 To 10000 Step 2 J = J + I Next

MsgBox \到10000之间偶数和为\End Sub

5. 6. 7. 8. 9. For I = 9999To 1 Step -2'此句于2009年8月18日纠正 J = J + I Next

MsgBox \到10000之间奇数和为\End Sub

复制代码

感谢109楼artemis_xu朋友对以上代码的纠正!

1. 2. 3. 4. 5. 6. 7. 8. 9.

复制代码

1. 2. 3. 4. 5. 6. 7. 8. 9.

'撰写:38度:老朽

'日期:2009-7-1 上午 11:40:59

Sub 求1到10000之间能被5整除的数之和2() Dim I&, J&

For I = 10000 To 1 Step -5 J = J + I Next

MsgBox \到10000之间能被5整除的数之和为\End Sub

'撰写:38度:老朽

'日期:2009-7-1 上午 11:40:59

Sub 求1到10000之间能被5整除的数之和() Dim I&, J&

For I = 0 To 10000 Step 5 J = J + I Next

MsgBox \到10000之间能被5整除的数之和为\End Sub

程序流程控制——For—Each 循环语句

===============================

有了前面对循环一词的理解,这里我们不用再多说,如果你知道了For—next语句的工作原理,这里再来学习For—each循环以及下面我们接着要讲的句式,那就相当简单了,同样的工作原理。 学会了吃苹果,那么离会吃梨的道路还会远吗?

呵呵,只是开个小小的玩笑,下面我们继续,首先来看看For—Each语句的句式:

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

和上面For—next句式是一样的工作原理。

这里的“元素变量”是用来遍历集合或数中中元素的变量,它从集合或数组的第一个元素开始,直到最后

一个元素,然后退出循环。

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

1. 2. 3. 4. 5. 6. 7. 8.

复制代码

Sub shtname()

Dim i As Integer, sht As Worksheet i = 1

For Each sht In Worksheets Cells(i, 1) = sht.Name

i = i + 1 '让写入名称的单元格下移一行 Next End Sub

程序流程控制——Do While语句

===========================

Do While也是循环语句,它分为两种情况,一种是把循环条件放在开头,一种是把循环条件放在结尾。

1、开头判断循环条件 语句格式:

Do Wihle 循环条件 语句块1 [Exit Do] 语句块2 Loop

首先判断循环条件,条件为真则执行Do到Loop之间的语句。

2、结尾判断循环条件 语句格式: Do

语句块1 [Exit Do] 语句块2

Loop Wihle 循环条件

先执行一次Do到Loop之间的语句,再判断循环条件,满足条件则进行循环。

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

1. 2. 3. 4. 5. 6.

Sub mysum()

Dim Lsum As Long, i As Long i = 1

Do While i <= 1000 Lsum = Lsum + i i = i + 1

本文来源:https://www.bwwdw.com/article/djaf.html

Top