VBA超详细总结.docx
《VBA超详细总结.docx》由会员分享,可在线阅读,更多相关《VBA超详细总结.docx(18页珍藏版)》请在冰豆网上搜索。
VBA超详细总结
VBA笔记
道具:
→
案例一:
代码:
解析:
拓展:
VBA前景知识:
VBA所实现的功能简单的说就是通过编写程序,用几个简单操作实现一系列的操作,以达到高效的目的,在做重复的操作时相当有效。
在EXCEL中,要进入VBA编辑界面,首先要调出开发工具选项卡。
按快捷键Alt+F+T到Excel选项,在自定义功能区勾选上开发工具并确定。
在Excel中,宏功能是默认禁用的,因为很多病毒会通过宏传播。
在使用之前需要启用该功能。
按快捷键Alt+F+T到Excel选项,在信任中心→信任中心设置→宏设置→启用所有宏→确定。
VBA中有对象、方法、属性。
理解这些是学习VBA的基础。
1、对象:
工作簿、工作表、单元格、行、列等
2、属性:
相应对象的属性。
如工作表名称、单元格的行高等属性一般理解为对象拥有的静态特性。
3、方法:
对相应对象所执行的动作称为对象的方法。
如单元格移动、单元格删除内容等。
从形状上来区别:
前面带绿色图标的就是方法,带手形标志的就是属性。
案例一:
如何点击按钮实现简单加法运算?
代码:
Sub加法运算过程()
Cells(1,5)=Cells(1,1)+Cells(1,3)
Endsub
解析:
在开发工具选项卡中插入按钮控件,修改宏名为“加法运算过程”,新建,这样就进入VBA编辑界面。
这里的宏简单讲就是编程产生的一系列操作,而点击刚才插入的按钮就可以触发这些操作,这样一个点击操作就可以实现一系列的操作。
Ctrl+S保存,这里下拉菜单中文件保存类型选成“启用宏的工作簿”。
因为默认文件类型是默认禁用的,很多病毒会通过宏传播,保存成xlsx则丢失代码
右击按钮→编辑文字→修改为“加法”。
这里的加法是按钮显示出来的名称,和宏名不一样。
宏是编程产生的一系列操作过程,引用宏名就代表操作这一系列过程。
而按钮可以指定不同的宏过程。
在开发工具选项卡中→宏→加法运算过程→编辑进入宏过程编辑界面。
输入下面代码。
上面代码中,sub表示宏开始,endsub表示宏结束,“加法运算过程”是宏名,后面的括号可有可无。
宏macro
Cells是VBA中最基本的对象,Cells(行号,列号)表示引用单元格,Cells(1,1)是指A1单元格的内容。
拓展:
案例二:
如何点击按钮实现新建,保存,关闭,打开工作簿?
代码:
Workbooks.Add
ActiveWorkbook.SaveAs"C:
\Users\Administrator\Desktop\工作簿4.xlsx"
ActiveWorkbook.Close
Workbooks.OpenFilename:
="C:
\Users\Administrator\Desktop\工作簿1.xlsx"
Workbooks("工作簿1.xlsx").Close
解析:
拓展:
Workbooks.open(“路径”)也可以打开文件
案例三:
定义函数:
(参数可以有多个,用逗号隔开)
代码:
Function乘积(a,b)
乘积=a*b
Endfunction
解析:
用函数名调用这个功能,可以在VBA中调用,也可以像其它函数一样调用。
括号内的参数可以有多个。
拓展:
系统函数:
sqr(a)平方根
如要在VBA中使用工作表中的函数,用
Apication.worksheetfunction.公式名称()直接调用
括号中引用范围时,需要要用range等调用,不能用“A1”引用
过程分为子过程和函数
案例四:
函数汇总()
代码:
(1)
Sub按钮5_Click()
Dimi,j,total
Dimw1AsWorksheet
Forj=2ToWorksheets.Count
Setw1=Worksheets(j)
i=2
total=0
DoWhilew1.Cells(i,2)<>""
total=total+w1.Cells(i,2)
i=i+1
Loop
w1.Cells(2,3)=total
Nextj
EndSub
(2)
Sub按钮6_Click()
'Call按钮5_Click
Dimi
Dimw1AsWorksheet,w2AsWorksheet
Setw2=Worksheets
(1)
Fori=2ToWorksheets.Count
Setw1=Worksheets(i)
w2.Cells(i,1)=w1.Cells(1,2)
w2.Cells(i,2)=w1.Cells(2,3)
Nexti
EndSub
(3)
Sub按钮7_Click()
Dimi,j,total
Dimw1AsWorksheet,w2AsWorksheet
Setw2=Worksheets
(1)
Fori=2ToWorksheets.Count
Setw1=Worksheets(i)'i循环工作表
j=2'j循环成绩
total=0
DoWhilew1.Cells(j,2)<>""
total=total+w1.Cells(j,2)
j=j+1
Loop
w1.Cells(2,3)=total
w2.Cells(i,1)=w1.Cells(1,2)
w2.Cells(i,2)=w1.Cells(2,3)
Nexti
解析:
'Call按钮5_Click‘为程序中的注释,只起解释作用,不会运算。
去掉’时,call+子过程,表示调用这个子过程。
Call是过程调用的关键字,当遇到call时,先运行调用的过程,再往下运行。
Sub,endsub即是一个子过程,宏是其小名。
过程调用的call可以省略,只写出过程名。
拓展:
案例五:
地址拆分
代码:
Sub地址拆分()
Cells(2,2)=Left(Cells(1,2),InStr(Cells(1,2),"县")-1)
Cells(3,2)=Mid(Cells(1,2),InStr(Cells(1,2),"县")+1,InStr(Cells(1,2),"路")-InStr(Cells(1,2),"县")-1)
Cells(4,2)=Mid(Cells(1,2),InStr(Cells(1,2),"路")+1,InStr(Cells(1,2),"号")-InStr(Cells(1,2),"")-1)
EndSub
解析:
拓展:
正则表达示处理字符串更容易
案例一:
三重循环汇总
代码:
解析:
拓展:
专题一:
常用类、对象、属性和方法
颜色:
vbred
RGB(r,g,b)
类
Application代表EXCEL本身
Workbook工作簿
Worksheet表
Range区域
上下为从属关系
Cells引用单元格是range对象的属性
相对于rangecells可以实现循环
属性
Cells(行数,列数).value
Cells(行数,列数).font.size
Cells(行数,列数).font.color=
Cells(行数,列数).font.name字体大小
Cells(行数,列数).font.fontstyle字体加粗
Cells(行数,列数).Interior.color背景颜色
Cells(行数,列数).height单元格行高(只能在显示中用)
Cells(行数,列数).rowheight行高(可以进行设置也可以进行msgbox显示)
withrange.font
.color=
.size=
.bold=
endwith
方法
Cells(行数,列数).select
activecell
Range引用多个单元格区域
如:
Range("A1:
A10,A18"),Range(cells(1,1),cells(10,1))
属性
Range.cells
Range.value让选定区域的值都为某个数。
此属性可以省略,为默认值
range.font.size/color/italic/bold/=(bold为粗体italic为斜休(用ture,false确定)
range.Interior.color背景颜色
range.Interior.colorindex=7背景颜色
方法
Range.delete
Range("A2:
D10").Select
Range("A2:
D10").copy目标位置
range.clear
range.clearcontents
range.clearformats清除格式
range.merge/unmerge合并/拆分单元格
Workbooks是工作簿集对象
用Workbook("办公费用")或Workbooks(3)引用某个工作表
属性
Workbooks.count
方法
Workbooks.add“路径”
Workbooks.open(“路径”)
Workbooks.OpenFileName:
="Array.xls",ReadOnly:
=True
Workbooks.close关闭所有打开的工作簿关闭所有工作簿
Workbooks(“XXX”).close关闭特定工作簿
Workbooks.saveas“路径.扩展名”保存文件,此处不返回值,所以不用括号
Workbooks
(1).Activate激活第一个工作簿
workbook是工作簿文件对象
属性
Workbook.ActiveSheet
Workbook.Author
Workbook.saved
Workbook.name
Workbook.path
方法
Workbook.Activate
Workbook.Close
Workbook.Save
Workbook.SaveAs另存为
Thisworkbook当前工作簿
属性
Thisworkbook.name
Thisworkbook.path
方法
Thisworkbook.
Activeworkbook活动工作簿
属性
Activeworkbook.author
方法
ActiveWorkbook.SaveAsFilename:
="C:
\Users\Administrator\Desktop\工作簿1.xlsx"
Worksheets当前工作簿所有的工作表
用Worksheet("XX")或Worksheets(3)引用某个工作表
属性
Worksheets.count
Worksheets.name
方法
Worksheets.Add
Worksheet
属性
Worksheet.Name
Worksheet.Visible
方法
Worksheet.Calculate对指定的工作表重新计算
Worksheet.Copy
Worksheet.Move
Worksheet.Delete
Sheet1sheet2
Application
Application.cells表示当前活动表的单元格
Application.Quit退出应用
Application.activeworkbook当前活动的簿
Application.activesheet当前活动的表
Apication.worksheetfunction.公式名称()直接调用
括号中引用范围时,需要要用range等调用,不能用“A1”引用
Application.displayalerts=false时,则就不会显示,强制覆盖。
专题二:
顺序、循环、分支三种结构
顺序
循环
for循环
指定次数。
与dowhile相比,for有内置的计数器
(1)
Fori=1to20step1
循环体
Nexti(单个for时i可不写)
(2)
Foreachainb(b.count)
循环体
Nexta如foreachwinworkbooks第一个工作表
foreachwinrange第一个单元格
=
fori=1tob.count
循环体
Nexti
While循环(无特定终点)
While条件
循环体
Wend
DO循环
DO(DO开关)
LOOP(DO结尾)
无限循环,可以在中间用EXITDO终止循环。
或者使用EXITSUB结束子过程。
有多层循环时,跳出的是内层do循环
EXITfor
Exitfunction
Exitsub可以用于退出第一次
End结束过程或块
Endfor/function/sub/if/select
单独用END结束当前过程或块
DoWhile循环(当)
DoWhile条件
循环体
Loop
其中do是循环,while是条件
Dountil(直到)
Dountil条件
循环体
Loop
While和until可以放在loop之后,表示先循环再判断。
Foreachainb
Dimbasrange
Foreachbinsheet1.range(“A3:
A11”)
Next
将每个单元格指定给b,多用于对象的操作
分支
If分支
If条件then
计算
Else(单个IF可不写)
计算
Endif
如果ifthen所有内容在一行内,此if可以不用endif结束
ELSEIF语句
If条件then
循环体
Elseif条件then
计算
Elseif条件then
计算
Else结果
Endif
从ABCD等级从大到小依次循环体,前面满足后面就不会执行。
SELECT判断语句
条件判断,像if一样
Pad=”888”
SELECTCASEPAD
CASE“888”
MSGBOX“good”
Caseelse(类似if中的else)
MSGBOX“bad”
ENDSELECT
For和if配合使用,在一堆中找出一个
跳转语句
标识:
Goto标识
Return(返回到goto)
专题三:
程序调试
设置断点:
在左边灰色区域点击或者F9。
单独执行:
F8。
CTRL+F8运行到光标处
F5运行
CTRL+BREAK在光标处中断。
调试→添加监视:
输入要监视的变量,显示变量的数值,而不用动鼠标位置。
调试→清除所有断点
注释
REM注释语句,或’
语法错误标记为红色
专题四:
疑问解决
录制宏:
记录手工,翻译成代码
帮助
VBA教程
专题五:
运算符
算术运算符
+-*/
^求幂
\整除
Mod求余
连接运算符
&+针对字符(&两边要加空格)
逻辑运算符
andornot(符号两边的表达式都要完整,不能省)优先级not>and>or返回true/false
运算符两边的表达式要完整才行
关系/比较运算符
<>=<>>=<=
专题六:
命名规则
optionexplicit强制声明
dima,b,c定义变量
constpi=3.14定义常量
dimw1asworksheet/workbook/range
setw2=worksheets.add
给对象赋值要在前面加set
新建保存文件:
Setwb=workbooks.add
Wb.saveas“路径”
wb.close
大小写相同
尽量用英文
不超过256
反映变量意义
不能是系统已用的名字。
如sub,end,if,for,while,
分为常量和变量
不能以数字开头
专题七:
快捷键
工程资源管理器:
CTRL+R
属性窗口:
F4
专题八:
数据类型
数据类型中文占用空间缩写
Byte字节1字节0-255dimaasbyte(a只能是0-255的数字)
例:
Dimaasbyte/dima%
超过范围将溢出
类型
占用
符号
范围
Boolean
布尔
2字节
true或false
Integer
整数
2字节
%
Long
长整型
4
&
Single
单精
4
!
Double
双精
8
#
string
字符串
定或变
$
Currency
货币型
8
@
变体变量
Date
String字符串长度$
Dimaasstring不定长
Dimaasstring*3定长
Object对象
Variant
Empty空
专题九:
VBE编辑器窗口
开发工具+VB;ALT+F11
在工具,选项,编辑器格式中调整字体
窗口
工程窗口:
对象,模块
属性窗口
编辑窗口下划线+空格+回车实现形式上的换行
立即窗口
在VBE的立即窗口中输入命令,回车后立即运行,大概由此而来为“立即窗口”,试一下,输入:
MSGBOX"ExcelHome"
回车后弹出一个对话框。
用得更多的是在程序调试过程中,把结果输出到立即窗口,检查程序运行结果是否正确,在代码中插入:
Debug.PrintS
运行这一句,会把变量S的值输出到立即窗口中。
debug.print的内容在立即窗口中显示
本地窗口
显示所有的数据
插入
(可以通过菜单或者工程窗口右键)
模块
窗体
类模块
视图:
本地窗口:
监视变量
编辑窗口:
监视变量
立即窗口
自定义工具
编辑
设置注释,解除注释块
专题十:
提示框
Msgboxa消息框显示a
Inputbox(“提示语”)
当保存时会弹出保存替换对话框。
如果
Application.displayalerts=false时,则就不会显示,强制覆盖。
后面要设置成ture.
专题十一:
文本操作
关于字符串“”
Replace(s,a,b)在s中用b替换a可以去掉字符串中的空格
Trim()去两边空格
Lcase转换成小写
ucase转换成大写,只能在VBA中用以上三个在字符串比较时有用
Left(s,a)s中,左a位
right(s,b)
mid(s,i,a)s中,从第i位开始的a位
INSTR(i,s,a)在s中从第i个字符找a,返回的是位置值,第一个参数可以省略。
Len()字符长度
双引号就是字符串的标志
特殊的字符可以是空格,换行符,回车符,0字符的空串等
&连接字符串时,前后有空格。
变量加&有特殊含义