VBA80.docx
《VBA80.docx》由会员分享,可在线阅读,更多相关《VBA80.docx(16页珍藏版)》请在冰点文库上搜索。
VBA80
VBA80_第01集.宏与VBA
Subtest()
Range("a1")=100
EndSub
Sub输入100()
'输入100Macro
'宏由LenovoUser录制,时间:
2011-4-22
Range("A1").Select
ActiveCell.FormulaR1C1="100"
Range("B4").Select
EndSub
Sub删除A1的内容()
'删除A1的内容Macro
'宏由LenovoUser录制,时间:
2011-4-22
Range("A1").Select
Selection.ClearContents
EndSub
Sub输入()
Range("b2")=""
EndSub
VBA80_第02集.VBA中的语句、对象、方法与属性
'VBA对象
'VBA中的对象其实就是我们操作的具有方法、属性的excel中支持的对象
'Excel中的几个常用对象表示方法
'1、工作簿
'Workbooks代表工作簿集合,所有的工作簿,Workbooks(N),表示已打开的第N个工作簿
'Workbooks("工作簿名称")
'ActiveWorkbook正在操作的工作簿
'ThisWorkBook'代码所在的工作簿
'2、工作表
''Sheets("工作表名称")
'Sheet1表示第一个插入的工作表,Sheet2表示第二个插入的工作表....
'Sheets(n)表示按排列顺序,第n个工作表
'ActiveSheet表示活动工作表,光标所在工作表
'worksheet也表示工作表,但不包括图表工作表、宏工作表等。
'3、单元格
'cells所有单元格
'Range("单元格地址")
'Cells(行数,列数)
'Activecell正在选中或编辑的单元格
'Selection正被选中或选取的单元格或单元格区域
'一、VBA属性
'VBA属性就是VBA对象所具有的特点
'表示某个对象的属性的方法是
'对象.属性=属性值
Subttt()
Range("a1").Value=100
EndSub
Subttt1()
Sheets
(1).Name="工作表改名了"
EndSub
Subttt2()
Sheets("Sheet2").Range("a1").Value="abcd"
EndSub
Subttt3()
Range("A2").Interior.ColorIndex=3
EndSub
'二、VBA方法
'VBA方法是作用于VBA对象上的动作
'表示用某个方法作用于VBA的对象上,可以用下面的格式:
Subttt4()
牛排.做熟的程度:
=七成熟
Range("A1").CopyRange("A2")
EndSub
Subttt5()
Sheet1.Movebefore:
=Sheets("Sheet3")
EndSub
'VBA中的代码的基本结构与组成部分
'VBA语句
'一、宏程序语句
'运行后可以完成一个功能
Subtest()'开始语句
Range("a1")=100
EndSub'结束语句
'二、函数程序语句
'运行后可以返回一个值
Functionshcount()
shcount=Sheets.Count
EndFunction
'三、在程序中应用的语句
Subtest2()
Calltest
EndSub
Subtest3()
Forx=1To100'fornext循环语句
Cells(x,1)=x
Nextx
EndSub
VBA80_第03集.循环语句
If判断语句:
Sub判断1()'单条件判断
IfRange("a1").Value>0Then
Range("b1")="正数"
Else
Range("b1")="负数或0"
EndIf
EndSub
Sub判断2()'多条件判断
IfRange("a1").Value>0Then
Range("b1")="正数"
ElseIfRange("a1")=0Then
Range("b1")="等于0"
ElseIfRange("B1")<=0Then
Range("b1")="负数"
EndIf
EndSub
Sub多条件判断2()
IfRange("a1")<>""AndRange("a2")<>""Then
Range("a3")=Range("a1")*Range("a2")
EndIf
EndSub
IIf函数判断:
Sub判断4()
Range("a3")=IIf(Range("a1")<=0,"负数或零","负数")
EndSub
select判断:
Sub判断1()'单条件判断
SelectCaseRange("a1").Value
CaseIs>0
Range("b1")="正数"
CaseElse
Range("b1")="负数或0"
EndSelect
EndSub
Sub判断2()'多条件判断
SelectCaseRange("a1").Value
CaseIs>0
Range("b1")="正数"
CaseIs=0
Range("b1")="0"
CaseElse
Range("b1")="负数"
EndSelect
EndSub
Sub判断3()
IfRange("a3")<"G"Then
MsgBox"A-G"
EndIf
EndSub判断范围:
Subif区间判断()
IfRange("a2")<=1000Then
Range("b2")=0.01
ElseIfRange("a2")<=3000Then
Range("b2")=0.03
ElseIfRange("a2")>3000Then
Range("b2")=0.05
EndIf
EndSub
Subselect区间判断()
SelectCaseRange("a2").Value
Case0To1000
Range("b2")=0.01
Case1001To3000
Range("b2")=0.03
CaseIs>3000
Range("b2")=0.05
EndSelect
EndSub
VBA80_第04集.判断语句
Subt1()
Range(“d2”)=Range(“b2”)*Range(“c2”)
Range(“d3”)=Range(“b3”)*Range(“c3”)
Range(“d4”)=Range(“b4”)*Range(“c4”)
Range(“d5”)=Range(“b5”)*Range(“c5”)
Range(“d6”)=Range(“b6”)*Range(“c6”)
EndSub
Subt2()
DimxAsInteger
Forx=2To6Step1‘step1表示按1递增,如果省略了step的话表示默认是按1递增;step2表示按2递增;step-1表示递减,此时前面的语句值应该是从大到小。
Range(“d”&x)=Range(“b”&x)*Range(“c”&x)
Nextx
EndSub
Subt3()
DimrgAsRange*定义一个单元格变量
ForEachrgInRange(“d2:
d18”)*单元格变量的取值为d2:
d18
Rg=rg.Offset(0,-1)*rgOffset(0,-2)*Offset(0,-1)表示其往左偏移了一个的单元格
Nextrg
EndSub
例子:
Subs1()
DimrgAsRange
ForEachrgInRange(“a1:
b7,d5:
e9”)
Ifrg=“”Then
rg=0
EndIf
Nextrg
EndSub
Subs2()
DimxAsInteger
Do
x=x+1
IfCells(x+1,1)<>Cells(x,1)+1Then
Cells(x,2)=“断点”
ExitDo
EndIf
LoopUntilx=14
EndSub
Subt4()
X=1
Do*do循环容易造成死循环,所以在使用时一定要注意。
x=x+1
Cells(x,4)=Cells(x,2)*Cells(x,3)
LoopUntilx=18*遇到死循环时,按住Ctrl+PauseBreak组合键可以强行结束循环
EndSub
Subt5()
x=1
DoWhilex<18
x=x+1
Cells(x,4)=Cells(x,2)*Cells(x,3)
Loop
Endsub
VBA80_第05集.VBA变量
DimmAsInteger
'变量
'一、什么是变量?
'所谓变量,就是可变的量。
就好象在内存中临时存放的一个小盒子,这个小盒子放的什么物体不固定。
Subt1()
DimXAsInteger'x就是一个变量
ForX=1To10
Cells(X,1)=X
NextX
EndSub
'二、小盒子里可以放什么?
'1放数字
'如t1
'2放文本
Subt2()
DimstAsString
DimXAsInteger
ForX=1To10
st=st&"Excel精英培训"
NextX
EndSub
'3放对象
Subt3()
DimrgAsRange
Setrg=Range("a1")
rg=100
EndSub
'4放数组
Subt4()
Dimarr(1To10)AsInteger,XAsInteger
ForX=1To10
arr(X)=X
NextX
EndSub
'三、变量的类型和声明
'1变量的类型
'详见帮助文件
'2为什么要声明变量
'3声明变量
'dimpublic
'四、变量的存活周期
'1过程级变量:
过程结束,变量值释放
'如t1
'2模块级变量:
变量的值只在本模块中保持,工作簿关闭时随时释放
'例5
Subt6()
m=1
EndSub
Subt5()
MsgBoxm
m=7
EndSub
'3全局级变量:
在所有的模块中都可以调用,值会保存到EXCEL关闭时才会被释放。
'public变量
Subt7()
MsgBoxqq
EndSub
'五变量的释放
'一般情况下,过程级变量在过程运行结束后就会自动从内存中释放,而只有一些从外部借用的对象变量才需要使用set变量=nothing进行释放。
VBA80_第06集.函数与公式
OptionExplicit
'一、在单元格中输入公式
'1、用VBA在单元格中输入普通公式
Subt1()
Range("d2")="=b2*c2"
EndSub
Subt2()
DimxAsInteger
Forx=2To6
Cells(x,4)="=b"&x&"*c"&x
Nextx
EndSub
'2、用VBA在单元格输入带引号的公式
Subt3()
Range("c16")="=SUMIF(A2:
A6,""b"",B2:
B6)"'遇到单引号就把单引号加倍
EndSub
'3、用VBA在单元格中输入数组公式
Subt4()
Range("c9").FormulaArray="=SUM(B2:
B6*C2:
C6)"
EndSub
'二、利用单元格公式返回值
Subt5()
Range("d16")=Evaluate("=SUMIF(A2:
A6,""b"",B2:
B6)")
Range("d9")=Evaluate("=SUM(B2:
B6*C2:
C6)")
EndSub
'三、借用工作表函数
Subt6()
Range("d8")=Application.WorksheeFunction.CountIf(Range("A1:
A10"),"B")
EndSub
'四、利用VBA函数
Subt7()
Range("C20")=VBA.InStr(Range("a20"),"E")
EndSub
'五、编写自定义函数
Functionwn()
wn=Application.Caller.Parent.Name
EndFunction
VBA80_第07集.VBE编辑器
'一、VBE的窗口
'1、工程窗口
'A显示工作簿工作表对象
'B窗体
'C模块
'D类模块
'range("a1")=10
'对应工程窗口的对象和模板,显示其所具体的一些特征。
'3、代码窗口
'A注释文字的设置
'B代码缩进的设置
'C代码强制转行的设置
'D代码运行和调试
'逐句运行
'设置断点
'E对象列表框和过程列表框
'4、立即窗口
'立即窗口可以把运行过程中的值立即显示出来,主要用于程序的调试
Subd()
DimxAsInteger,stAsString
Forx=1To10
st=st&Cells(x,1)
Debug.Print"第"&x&"次运行结果:
"&st
Nextx
EndSub
'5、本地窗口
'在本地窗口中可以显示运行中断时对象信息、变量值、数组信息等。
Subd1()
DimxAsInteger,kAsInteger
Forx=1To10
k=k+Cells(x,1)
Nextx
EndSub
VBA80_第08集.VBA分支与End语句
OptionExplicit
'一、END语句
'作用:
强制退出所有正在运行的程序。
'二、Exit语句
'退出指定的语句
'1、ExitSub
Sube1()
DimxAsInteger
Forx=1To100
Cells(1,1)=x
Ifx=5Then
ExitSub
EndIf
Nextx
Range("b1")=100
EndSub
'2、Exitfunction
Functionff()
DimxAsInteger
Forx=1To100
Ifx=5Then
ExitFunction
EndIf
Nextx
ff=100
EndFunction
'3、Exitfor
Sube2()
DimxAsInteger
Forx=1To100
Cells(1,1)=x
Ifx=5Then
ExitFor
EndIf
Nextx
Range("b1")=100
EndSub
'4、Exitdo
Sube3()
DimxAsInteger
Do
x=x+1
Cells(1,1)=x
Ifx=5Then
ExitDo
EndIf
LoopUntilx=100
Range("b1")=100
EndSub
OptionExplicit
'Goto语句,跳转到指定的地方
Subt1()
DimxAsInteger
Dimsr
100:
sr=Application.InputBox("请输入数字","输入提示")
IfLen(sr)=0OrLen(sr)=5ThenGoTo100
EndSub
'gosub..return,跳过去,再跳回来
Subt2()
DimxAsInteger
Forx=1To10
IfCells(x,1)Mod2=0ThenGoSub100
Nextx
ExitSub
100:
Cells(x,1)="偶数"
Return
EndSub
'onerrorresumenext'遇到错误,跳过继续执行下一句
Subt3()
OnErrorResumeNext
DimxAsInteger
Forx=1To10
Cells(x,3)=Cells(x,2)*Cells(x,1)
Nextx
EndSub
'onerrorgoto'出错时跳到指定的行数
Subt4()
OnErrorGoTo100
DimxAsInteger
Forx=1To10
Cells(x,3)=Cells(x,2)*Cells(x,1)
Nextx
ExitSub
100:
MsgBox"在第"&x&"行出错了"
EndSub
'onerrorgoto0'取消错误跳转
Subt5()
OnErrorResumeNext
DimxAsInteger
Forx=1To10
Ifx>5ThenOnErrorGoTo0
Cells(x,3)=Cells(x,2)*Cells(x,1)
Nextx
ExitSub
EndSub