可以通过在属性窗口设置名称来给对象重新命名,名字可以由字母、汉字(2字符)、数字以及下划线组成,但必须以字母或汉字开头。名字的长度<=255个字符
●日期型数据Date(缺省值为#1899/12/31#)'注:日期型数据的值用两个“#”括起来。
●布尔型数据Boolean【默认值为False=0】布尔型数据是一个逻辑值,用于逻辑判断,只有两个值True和False。
当布尔型转换为其他数据类型时:
True->-1
False->0
当其他数据类型转换为布尔类型时:
非0值-> True
0 -> False
●对象型数据Object
可用来表示应用程序中或某些其他应用程序中的对象。Object变量存储为4字节(32位)的地址形式
●变体型数据Variant
变体型数据是一种可变的数据类型,可以存放任何类型的数据。在程序中不特别说明时,VBA会自动将变量默认为Variant型变量。
●Dim StrName2 As String * 5
声明了一个变量StrName2,其为一个定长字符串类型,长度为5。
变量是内存中用于存储值的临时存储空间。
存储在变量中的数据可以更换,因此变量通常用来存储在程序运行过程中需要临时保存的数据或对象。
● Const 常量名 [As 数据类型]= 数值
例如:ConstPI As Single = 3.1415926
Const V As Integer= 100
注:常量必须在声明时初始化
●日期型数据的算术运算
1.两个日期型数据可以相减: DateB-DateA
结果是一个数值型整数(两个日期相差的天数)。
例:#2015/05/08# - #2015/05/01# 其结果为数值:7
2.一个日期型数据(DateA)与一数值数据(N)可作加法运算:DateA+N,其结果仍是一个日期型数据。
3.一个日期型数据(DateA)与一数值数据(N)可作减法运算:DateA-N,其结果仍是一个日期型数据。
例:#2015/05/08# -7 其结果为日期:#2015/05/01#
●Abs() 绝对值
Rnd() 产生从0到1的随机数
Sqr() 平方根
Int(n) 取小于或等于n的最大整数
Round(n,m) 四舍五入
●Weekdayname(7)
输出结果:星期六
又如:weekdayname(7,True)
输出结果:周六
●Workday(Start_date,days,[holidays])
作用:返回在某日期(起始日期)之前或之后、与该日期相隔指定工作日的某一日期的日期值。工作日不包括周末和专门指定的假日。
参数: Start_date 必需。一个代表开始日期的日期。 days 必需。Start_date 之前或之后不含周末及节假日的天数。days为正值将生成未来日期;为负值生成过去日期。 Holidays可选。一个可选列表,其中包含需要从工作日历中排除的一个或多个日期,例如各种省\市\自治区和国家\地区的法定假日及非法定假日。该列表可以是包含日期的单元格区域,也可以是由代表日期的序列号所构成的数组常量。
●Dateserial(y,m,d) 返回一个日期形式
DateAdd(interval, number, date)返回包含已为其添加指定时间间隔的日期
DateDiff((interval,date1, date2[, firstdayofweek[, firstweekofyear]])返回一个指定两个特定日期之间的时间段数目。
DatePart(interval,date [,firstdayofweek[, firstweekofyear]])返回包含给定日期的指定部分。
DatePart("yyyy",#2015-12-20#)
DateDiff("yyyy",#2000-12-20#,#2015-1-1#)
DateAdd("m",2,#2015-12-20#)
●Asc() 将字符转换成ASCII
Chr() ASCII转换成字符
CDate() 文本型转为日期型
Str() 数值转换为字符串
Val() 数字字符串转换为数值
●例如: instr(2,“ssschina”,“sch”,1)
结果:3
第三章 VBA顺序结构
一.程序语句:是执行具体操作的指令(VBA关键字、属性、函数、运算符以及VBE可识别的指令符号的任意组合)
●一条语句也可分若干行书写,但在要续行的行尾加入续行符(空格和下划线,即 _)
●VBA允许使用复合语句,即把几个语句放在一行中,各语句间用冒号“:”分隔
二.赋值语句
变量名 = <表达式> 对象.属性= <表达式>
●赋值语句兼有计算与赋值的双重功能
●右边表达式类型与左边变量类型不同时“向左转换”
●赋值号左边只能是变量(或属性),不能是常量或表达式。
●不能在一条赋值语句中,同时给多个变量赋值。
●可使用With语句为一个对象的多个属性赋值
三.编写事件的步骤
1.声明(变量、常量、数组)
●Dim 变量名 [As 类型]
●Const 常量名 [As 类型] = 表达式
●Dim 数组名(下标1[,下标2…]) [As 数据类型]
2.初始化变量 a=0 a=1
3.输 入
●文本框 X=Val(t1.Value)
●单元格 X=range.value
●输入对话框 X=Val(InputBox(“请输入”))
4.数据处理
语句 赋值 选择 循环(确定次数用FOR,明确条件用DO LOOP ) 自定义函数
5.输 出
●标签 T1.Caption=Str(x)
●文本框 t1.value=Str(x)
●单元格 range.value= x
●对话框 MsgBoxStr(x)
三.编程思路
1.分析题目,根据题意列出方程
2.设计界面,确定界面上的控件有哪些
3.选择触发事件、确定输入输出。
4.编写事件过程
●声明变量 ●确定输入方式 ●进行计算●把变量带入方程 ●确定输出方式
第四章 VBA选择结构
(分支结构:分支结构事实上是一种选择,在不同的条件下选择执行不同的程序段。)
一. If 语句
●If …Then(单分支)
●If …Then …Else(双分支)
●If …Then …Elseif(多分支)
●嵌套If
二. Select case 语句
Select Case <变量或表达式> 1、数字;表达式
Case <条件1> 2、一组用逗号分隔的枚举值
<语句块1> 3、表达式1 to 表达式2
Case <条件2> 4、Is 关系表达式
<语句块2>
End Select
第五章 VBA循环结构
一.For循环语句(先检查“循环变量”的值是否超过“终值”)
For 循环变量(数值变量) = 初值 To 终值 [Step 步长](将初值赋给循环变量)
[语句块]
[Exit For](只能跳出一重循环)
[语句快]
Next [循环变量]
【循环终止的条件是循环变量赋值超过终值,而不是等于终值 】
【循环次数的计算:次数= int((终值一初值)/步长)+1】
【当步长=0时,永不终止】
二.循环嵌套【外层循环完全“包含”内层循环,不能发生交叉】
● for i = x to y
for j = x1 to y1
for k = x2 to y2
……
next k
next j
next i
【使用外层循环来控制输出多少行,内层循环来控制每行。】
●Do…Loop循环语句 【当不清楚循环次数但清楚循环的执行条件或退出条件时】
语法形式1: 语法形式2:
Do [While|Until <条件> Do
[语句块] [语句块]
[Exit Do] [Exit Do]
[语句块] [语句块]
Loop Loop [While|Until<条件>]
●For Each语句【需要遍历数组或集合的每个元素时】
For Each 元素变量In数组或集合
循环体
[Exit For]
循环体
Next[元素变量]
第六章 数组【处理同一类型的成批的数据,由一定数目的同类元素按照一定顺序排列而成的结构类型数据】【连续区域】(下标……)
a(1 to 10 ) '只是十个空格
●倒序输出【两两对应】
Dim a(1 To 10) As Integer, t AsInteger
For i= 1 To 10 / 2
t= a(i)
a(i) = a(10 - i+ 1)
a(10 - i+ 1) = t
Next i
For i= 1 To 10
Me.Text3.Value = Me.Text3.Value & a(i)& Space(1)
Next i
●数组排序问题
◆选择排序方法【选择小的排在前面】
排序过程:
(1)首先通过n-1次比较,从n个数中找出最小的,将它与【第一个数】交换——第一趟选择排序,结果最小的数被安置在第一个元素位置上
(2)再通过n-2次比较,从剩余的n-1个数中找出次小的数,将它与第二个数交换——第二趟选择排序
(3)重复上述过程,共经过n-1趟排序后,排序结束
for i = 1 to n-1 '总共比较n-1次
for j = i+1 to n '从i+1个元素开始比较到第n个元素
if a(i)>a(j) then
t = a(i)
a(i)=a(j) '【数!】把较小的a(j)给a(i) '【位置】a(i)仍是前一位
a(j)=t
next j
next i
◆冒泡法
排序过程:
(1)有n个数(存放在数组a(n)中),第一趟将每相邻两个数比较,小的调到前头,经n-1次两两相邻比较后,最大的数已“沉底”,放在最后一个位置,小数上升“浮起”;
(2)第二趟对余下的n-1个数【最大的数已“沉底”】按上法比较,经n-2次两两相邻比较后得次大的数;
(3)依次类推,n个数共进行n-1趟比较,其中,在第j趟中要进行n-j次两两比较。
For i= 1to n-1 ‘i为比较趟数,一共进行n-1趟比较【仍为n-1趟】
For j= 1 to n-i (往后比较) ‘j为每趟中各次参与前后元素两两比较的数组元素的下标
‘当i=1时(第一趟),该趟共比较n-1次
‘当i=2时(第二趟),该趟共比较n-2次(因为最大的元素已经沉底了呀)
‘当i=n-1时(第n-1趟),该趟该趟共比较1次
if A(j)>A(j+1) Then ‘如果前面的数组元素比后面的大,则相
‘邻下标进行交换
t=A(j)
A(j)=A(j+1)
A(j+1)=t
End If
Next j
Next i
第七章 VBA过程与函数
【VBA中的每一个程序都包含过程,VBA的主体结构就是过程
例如:录制宏是一个过程,一个自定义函数也是一个过程。】
●子过程(Sub过程) Private|Public Sub 子过程()
Exit Sub
End Sub
●函数过程(Function过程) Function 函数过程(rng As Range )
Exit Function
End Function
●属性过程 Property Get 属性过程() As Variant
End Property
一.子过程
【过程名可以和本过程的私有变量同名,但却不能和公有变量同名。】
例如:
Sub 身份证() Dim身份证 As String (公有变量)
Dim 身份证 As String Sub 身份证()
身份证=me.text.value 身份证=me.text.value (错!)
End Sub End Sub
●模块级过程
是指只能在【当前模块】调用的过程,它的特征有三个:
(1)声明Sub过程前使用【Private】
(2)只有当前模块可以调用
(3)不出现在“宏”对话框中
●工程级过程
是指在当前工程中任何地方都可以随意调用的过程。它的特征有三个:
(1)声明Sub过程时没有使用“Public”和“Private”,则默认为公有过程
(2)非当前过程,而是任何模块或者窗体中都可以调用。
(3)可以出现在“宏”对话框中。
●Sub过程的嵌套调用方式【所有过程都是可以递归的,即可以调用自己来完成任务。】
语法:【call 】过程名(参数),或者使用Application对象的Run方法
示例:Sub 过程一
Msgbox “你好!”
End Sub
Private Sub 过程二()
[Call] 过程一 / Applicatioin.Run 过程一
End Sub
二.function【用于返回一个值或者数组】(相比而言,Sub过程既可以返回值又可以对引用的对象进行修改。)(Function的参数绝不能与Function过程名一致)
(如果自定义的Function名称与VBA内部名称一致,仍然可以正常执行,只是在代码中调用Excel内部函数时必须声明其对象库。如:自定义函数sqr,当要区分调用的函数是VBA内部函数sqr时,需要使用如下形式:VBA.sqr。如果直接使用sqr则调用的是自定义函数sqr)【faction:直接写函数名称】
过程的参数:按值传递参数与按址传递参数
●采用Byval声明参数——按值传递参数。这种情况下过程访问的是变量的副本,过程不会改变变量本身的值。
例如:所有工作表事件和工作簿事件的参数都是按值传递的。
●采用ByRef【默认】声明参数——按址传递参数。这种情况下过程访问的是变量本身,过程可以【改变】变量的真正的值。
Function函数的功能是:【用于返回一个值或者数组。】
在Function过程结束前,【必须将计算结果赋给:Function函数名称】
例如:Public Function Fun()
Fun= Int(Rnd()*10)+1
End Function
●创建图表 shape!
Private Sub CommandButton1_Click()
Dim ws As Worksheet
Dim shp As Shape
'工作表中插入图表
Set ws = Worksheets("data")
Set shp = ws.Shapes.AddChart
With shp '设置图表的位置
.Left = ws.Range("F8").Left
.Top = ws.Range("F8").Top
With .Chart 'with 里的with……
.SetSourceData ws.Range("A1:E6") '设置图表的数据源
.ChartType = xlColumnClustered'设置图表的类型,簇状柱形图
End With
End With
End Sub
●With语句
With Object
[Statements]
End With
其中, Object:代表一个对象,且必须是对象。
With Worksheets.Add
.Name = "课程表"
.Move after:=Worksheets(Worksheets.Count)
End With