|
楼主 |
发表于 2011-3-15 00:19
|
显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
第三讲 VBA的语法基础
在VBA编程过程中,最基本问题就是处理数据,凡是有数据的都会涉及到数据类型。呵呵,可能在处理单个小程序的时,你没有感受到程序运行慢,我以前也是这样的,有一个网友刚学VBA,问了一个这样的问题---------下面这个程序Application.ScreenUpdating = False,Application.ScreenUpdating = True 有什么作用,- Sub test()
- Application.ScreenUpdating = False
- For i = 1 To 100
- s = s + i
- Next i
- MsgBox s
- Application.ScreenUpdating = True
- End Sub
复制代码 我说这是关闭屏刷新,加速程序运行。
这个网友回复我说,这个作用没有发现啊,没有感觉到?好像用不用都是一样的。后来我回复他,你运行一下个看看- Sub Macro4()
- Range("D2").Select
- Dim I As Integer
- For I = 1 To 500
- ActiveCell.Offset(-1, -2).Range("A1").Select
- Selection.Copy
- ActiveCell.Offset(1, 2).Range("A1").Select
- ActiveSheet.Paste
- ActiveCell.Offset(0, -2).Range("A1").Select
- Application.CutCopyMode = False
- Selection.Copy
- ActiveCell.Offset(0, 3).Range("A1").Select
- ActiveSheet.Paste
- ActiveCell.Offset(1, -3).Range("A1").Select
- Application.CutCopyMode = False
- Selection.Copy
- ActiveCell.Offset(-1, 4).Range("A1").Select
- ActiveSheet.Paste
- ActiveCell.Offset(3, -2).Range("A1").Select
- Next I
- Range("D2").Select
- End Sub
复制代码 他告诉我这个看见屏幕在闪了,我就对他说,你这个程序前面和后面加上这两句看Application.ScreenUpdating = False,Application.ScreenUpdating = True
他过了一会说,明白了,明白了,屏幕不闪了
一说一说,又离题了,但我们不会写代码时,我不会关注我们的代码运行的速度,我们只要结果,就像小时候学的一篇课文,“我要的是葫芦”,不管叶子有没虫子,但当你写的代码长长时,代码复杂时,运时时间很长时,这时你就会想到了优化代码,来提高自己程序运行速度了。因此我们就要理解,明白数据的类型,什么是数据类型呢?数据类型是指程序如何将数据存储在内存中,那一种类型我们就要定义那一种最合适的数据类型,打个浅显的比方-----你老婆叫你去买一斤油,你是不是抬一个大水缸去,还是拿一个麻袋去,还是拿一个一斤装的大小的瓶子去?你马上会回答我,拿一个一斤装的大小的瓶子去,对了,数据类型也是同样的道理,呵呵,不吹牛了,大家看看下面这一些吧
1.数据类型:
学生的姓名,学生的年龄,学生的出生日期(常用数据类型有:Byte(字节型); Integer (整型); Long(长整型); Single(单精度浮点型,7位有效数字); Double (双精度浮点型,有效数字15位); String(字符串型);对象型(例如单元格区域和工作表); Variant(变体型,也叫万能的类型)
2.变量:变量可以使程序变得更加富有活力
(1).变量名称要注意几点:
A.不能把关键字做变量名
B.部分符号不能在变量中出现,如(#*%!)
C.不区分大小写,但我们一般大小写混写,第一个字母大写,其它的小写。
D.也可以使用中文名称,但是尽量不用中文名称,如果在英文版会报错。
(2)变量声明(电脑里划出一个储存区域来储存变量的值,变量的声明就决定了变量的大小,而大小就是我们前面讲的数据类型决定的)
(3)变量的声明方式
A.语法格式: Dim 变量 as 数据类型.如Dim i as Integer
B.也可以一行定义多个变量,之间用逗号分开
如 Dim i As Integer, F As String, D As Long
(4).强制声明:变量使用前声明是一个好习惯,由于VBA里可以不声明变量,因此用户会忘记这一点,所以我们要求变量进行强制声明(工具菜单==选项==编辑器==要求声明变量)
(5)变量的作用域:
A.过程级变量
B.模块级变量
c.全局级变量
3.运算符和表达式:
(1).算术运算符:有+,-,*,/,&
(2).比较运算符:=,<>,>=,<=,Like
(3).逻辑运算符:And,Or,Not
(4)表达式:右边的值赋给运算符左边的
附件里的代码一解析- Sub aa()
- Dim i As Byte '定义变量I为字节型
- For i = 1 To 300 '给变量I赋值,范围是1到300
- c = c + i '累加把值赋给C
- Next i '下一个I 和上面那个FOR组成一个循环语句,FOR NEXT
- MsgBox c 'MsgBox是输出函数,把1加300的和显示出来
- End Sub
复制代码 '这个代码错在那里呢 , 错在我们定义数据变量这里, 因为Byte的范围0到255
改正后的- Sub test()
- Dim i As Integer '定义变量I为整型
- For i = 1 To 300 '给变量I赋值,范围是1到300
- c = c + i '累加把值赋给C
- Next i '下一个I 和上面那个FOR组成一个循环语句,FOR NEXT
- MsgBox c 'MsgBox是输出函数,把1加300的和显示出来
- End Sub
复制代码 附件里的代码二解析:- Dim C As Integer '定义变量C为整型
- Dim I As Integer '定义变量I为整型
- Sub AA()
- For I = 1 To 100 '给变量I赋值,范围是1到100
- C = C + I '累加把值赋给C
- Next I '下一个I 和上面那个FOR组成一个循环语句,FOR NEXT
- MsgBox C 'MsgBox是输出函数,把1加100的和显示出来
- End Sub
- Sub BB()
- For I = 1 To 100 '给变量I赋值,范围是1到100
- C = C + I '累加把值赋给C
- Next I '下一个I 和上面那个FOR组成一个循环语句,FOR NEXT
- MsgBox C 'MsgBox是输出函数,把1加100的和显示出来
- End Sub
复制代码 为什么求1到100的和,点击第一次是对的,点击第二次就不对了?呵呵,我们错在那里啊?我们错在我们定义变量时,是定义模块级变量, 所以我们这个变量值还没有销毁,上次还存在,而不是定义过程级变量
改正后的代码
- Sub AA()
- Dim C As Integer
- Dim I As Integer
- For I = 1 To 100
- C = C + I
- Next I
- MsgBox C
- End Sub
- Sub BB()
- Dim C As Integer
- Dim I As Integer
- For I = 1 To 100
- C = C + I
- Next I
- MsgBox C
- End Sub
复制代码 附件里的代码三解析:- Sub aa()
- Dim F As Long '定义变量F为长整型
- F = InputBox("请输入你的姓名", "姓名输入") '用输入函数把姓名输进来,再把值赋给F
- If F = "" Then '如果F等于空 那么
- Exit Sub '退出程序
- Else '否则
- MsgBox (F & "你好!!1") '用输出函数显示"某某你好!!!"
- End If '一对判断语句IF THEN END IF
- End Sub
复制代码 为什么此程序我输数字放在姓名框也报错呢???
因为空字符串也是文本型String
改正后的代码- Dim F As String '定义变量F为字符串型 F = InputBox("请输入你的姓名", "姓名输入") '用输入函数把姓名输进来,再把值赋给F
- If F = "" Then '如果F等于空 那么
- Exit Sub '退出程序
- Else '否则
- MsgBox (F & "你好!!1") '用输出函数显示"某某你好!!!"
- End If '一对判断语句IF THEN END IF
- End Sub
复制代码 第四讲 Range对象 113楼 http://club.excelhome.net/thread-691838-12-1.html
[ 本帖最后由 佛山小老鼠 于 2011-3-15 22:09 编辑 ] |
评分
-
1
查看全部评分
-
|