vba

可以通过在属性窗口设置名称来给对象重新命名,名字可以由字母、汉字(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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容

  • 1.1 VBA是什么 直到90年代早期,使应用程序自动化还是充满挑战性的领域.对每个需要自动化的应用程序,人们不得...
    浮浮尘尘阅读 21,699评论 6 49
  • 本例为设置密码窗口 (1) If Application.InputBox(“请输入密码:”) = 1234 Th...
    浮浮尘尘阅读 13,593评论 1 20
  • 杭州可不比黄山自由,所以六点多就必须得起床。外加赖床的老毛病,扭扭捏捏到6点五十起来。墨迹墨迹准备出门,老妈...
    Jango哑炮阅读 320评论 2 0
  • 曾经日思夜想的人,见面连说一句话都吝啬. 致自以为是的现代人和爱情. 【以下部分摘录】 一个人若对另一个人执念,多...
    竹我晴天阅读 506评论 3 3
  • 透过车窗,重新审视自己,在欲望恒生,越来越浮躁的社会,才发现自己真的不了解自己,当初是为了梦想,而现在是为了工作...
    融融春风阅读 297评论 0 0