该教程适用于有一点编程基础或了解面对对象编程(OOP)的同学观看学习的
一、简介
一种最简单的宏操作就是录制宏,网上教程很多也很详实这里就不累述了。
基础概念介绍
1.VBA代码:VBA的代码组成了VBA程序。
2.过程:用VBA代码把完成一个任务的所有操作保存起来就是一个VBA过程。
3.模块:是保存过程的地方,一个模块可以有多个过程。
4.对象:就是代码操作和控制的东西。
5.对象的属性:属性是对象包含的内容和特点。例:一辆车是一个对象,那么车的颜色就是其属性。
6.对象的方法:方法是指在对象上执行某个操作。例:一辆车是一个对象,那么启动车就是其方法。
打开VBA编辑器的方法
1.按【Alt+F11】
2.点击【开发工具】-【Visual Basic】
3.点击“工作表标签”-“查看代码”
4.在ActiveX控件点左键-“制定宏“,然后选择相应的宏名进行编辑
VBA编辑界面的窗口介绍
//ToDo
编写VBA之前的操作
1.添加模块:
-点击【插入】-【模块】
-在“资源管理器窗口”中点击左键-【插入】-【模块】
2.添加过程:
-在选择相应窗口后点击【插入】-【过程】
-手动输入
Public Sub subname()
End Sub
3.一个完整的VBA sub过程
Public Sub subname()
MsgBox "hello word!"
End Sub
二、编程规则
语法
1.EXCEl的数据类型:日期值、数值、文本、逻辑值、错误值
2.VAB的数据类型:布尔型、整数型、小数型、字符串型、日期型、对象型,变体型、用户自定义类型(其中对象型需要多多了解),可以了解VBA为弱类型语言
3.声明变量:Dim
变量名
As
数据类型
,可以定义不同的作用域(Public、Private、Static),Option Explicit加上这段代码可以强制声明所有变量
4.给数据类型的变量赋值:[Let]
变量名
=
要存的数据
(中括号的关键值可以省略)
5.给对象类型的变量赋值:set
变量名
=
要存储的对象名称
。
Set sht = ActiveSheet
6.可同时生成多个变量
7.声明常变量
Const p As Single = 3.14
8.声明数组:Dim
数组名
(a to b) As
数据类型
,可以声明多维多维数组
9.可使用变量类型声明符定义变量类型:Dim Str As String 相当于 Dim Str$
10.声明变量时不指定变量类型那么这个变量就是变体形
!对象的相关概念
1.对象就是用代码操作和控制的东西
2.对象的层次结构:程序(Application)->工作簿(Workbooks)->工作表(Worksheets)->单元格(Cells/Range)
3.集合就是多个同类型的对象。例:Workbooks就是多个Workbook的集合
4.对象和属性是相对而言的,一个对象的属性也可以是另一个对象
5.在编辑器中按【Ctrl+J】弹出的列表中带绿色图标的项是方法
运算符
//ToDo
VBA的内置函数
1.获取帮助点击【帮助】-【Microsoft visual basic for Application】
2.在“代码窗口”键入“vba.”会弹出函数列表
控制语句
1.条件语句
If x<1 Then
MsgBox "x<1"
ElseIf x>0.5 Then
MsgBox "x>0.5"
Else
MsgBox "x<0.5 or x>1"
End If
2.Select Case语句
Select Case **x**
Case Is x<1
MsgBox "x<1"
Case Is x>0.5
MsgBox "x>0.5"
Case Else
MsgBOx "x<0.5 or x>1"
End Select
3.for循环
Dim i As Single
For i = 1 To 10 Step 1
MsgBox i
If i = 5 Then
**Exit For**
End If
Next i
4.Do While 循环
Dim i As Single
i = 1
Do While i < 5
MsgBox i
i = i + 1
If i = 4 Then
**Exit Do**
End If
Loop
'当死循环时按【Ctrl + break】
'还有个类似的Do Until
5.For Each 循环
Dim arr() As Variant, i As Variant
arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
For Each i In arr()
MsgBox i
If i = 5 Then
**Exit For**
End If
6.GoTo语句
//ToDo
7.With语句
With Object
.AttributeA = a
.AttributeB = b
.action()
End With
在过程中执行过程
1.输入过程名与参数
2.输入”Call”+过程名与参数
3.输入”Application.Run”+”过程名与参数”
4.过程的作用域:如果一个过程被声明为私有过程,那么只有这个模块的过程能调用它;只有声明为公共过程才能在其他模块调用
在VBA中自定义一个函数在EXCEl中使用
1.点击【插入】-【过程】-【添加过程】-【函数】
2.手动输入
Public Function row()
row = ActiveCells.row'这是函数体,必须要赋值给函数名
End Function
3.在vba中也能用自定义函数
4.可以给函数设置参数
Public Function rowss(c As Variant)
Application.Volatile True '设置易失性,这样按【F9】才会刷新
rowss = c.Interior.Color
End Function
三、常用对象
这里介绍常用的对象,这些对象会了就能胜任大部分的VBA操作!!!
-常用的对象有
1.Application:代表EXCEl应用程序
2.Workbook:代表EXCEl的工作簿
3.Worksheet:代表EXCEl的工作表
4.Cells/Range:代表EXCEl的单元格
Application
Option Explicit
Public Sub template()
Cells.clearcontents '清除数据
Application.ScreenUpdating = False '关闭屏幕更新
Application.DisplayAlerts = False '取消显示警告对话框
Application.EnableEvents = False '禁用事件
Application.WorksheetFuncion.CountIf(Range("A1:B50",">1000") '调用EXCEl中的函数
Application.EnableEvents = True '开启事件
Application.DisplayAlerts = True '开启显示警告对话框
Application.ScreenUpdating = True '开启屏幕更新
'还可以修改程序中的各个区域。例如【状态栏】、【编辑栏】、【行标】、【列标】等等
'Application常用的属性:
'ActiveCell\ActiveChart\ActiveSheet\ActiveWindow
'ActiveWorkbook\Charts\Selection\Sheets\Worksheets\Workbooks
End Sub
Workbook
Workbook对象是Workbooks集合中的一个成员:就像英语中的可数名词,在VBA中,Workbook代表一个工作簿,加上s后的Workbooks标识当前打开的所有工作簿,即工作簿集合。
1.引用指定的工作簿
-WorkBooks.item(3)/WorkBooks(3)
-Workbooks(“workbooksName”)
-注意点:
-如果是新建的工作簿,在不保存的情况下,引用时不能加扩展名
-如果是已经存在的文件,当系统设置显示文件的扩展名时,使用工作簿名称
引用工作簿时必须带上扩展名
2.一些常用属性
With Workbooks(非参数检验总结.xlsx)
.Name = a
.Path = b
.FullName = c
End With
3.创建工作簿
Workbooks.Add "C:\Users\xiebin\Desktop\非参数检验总结.xlsx" '用非参数检验总结为模板创建一个工作簿,最好使用绝对路径
Workbooks.Add Template:=xlWBATWorksheet '创建一个空的普通工作表
4.打开工作簿
Workbooks.Open Filename:= "C:\Users\xiebin\Desktop\非参数检验总结.xlsx" '打开“非参数检验总结.xlsx”工作簿
Workbooks.Open "C:\Users\xiebin\Desktop\非参数检验总结.xlsx" '简略写法
5.激活工作簿
虽然可以同时打开多个工作簿文件,但同一时间只能有一个工作簿是活动的。如果想让不活动的工作簿变为活动工作簿,可以用Workbooks对象的Activate方法激活它。
Workbooks("Book1").Activate '激活工作簿“Book1”
6.保存工作簿
ThisWorkbook.Save '保存已经存在的工作簿
ThisWorkbook.SaveAs Filename:= "D:\template.xlsm" '将工作簿到D盘,并且会关闭原工作簿打开另存的工作簿
ThisWorkbook.SaveCopyAs Filename="D:\template.xlxs" '另存了工作簿后保留原工作簿不打开新的工作簿
7.关闭工作簿
Workbooks("Book1").Close '关闭Book1工作簿
Workbooks("Book1").Close savechanges:=True '关闭工作簿并保存修改
Worksheet
1.引用工作表
Worksheets.Item(index) '使用索引
Worksheets(index) '使用索引的简略方法
Worksheets("worksheetsname") '使用工作表的在EXCEl中的标签名称或在【工程资源管理器】/【属性窗口】中的代码名称
2.添加工作表
Worksheets.Add '在活动工作表中新建一张工作表
Worksheets.Add before:=Worksheets(1) '在第一张工作表前插入一张新的工作表
Worksheets.Add after:=Worksheets(2) '在第二张工作后插入一张心得工作表
Worksheets.Add after:=Worksheets(1),Count:=3 '在第一张工作表后插入三张工作表
3.对新建的工作表命名
ActiveSheet.Name = "Zing" '新建的工作表总是活动工作表
4.删除工作表
Worksheets("sheet1").Delete '删除“sheet1”工作表名称
5.激活工作表
Worksheets(1).Activate '隐藏时会报错
Worksheets(1).Select
6.复制工作表
Worksheets("sheet1").Copy before:=Worksheets("sheet2") '复制工作表“sheet1”到“sheet2”工作表前面
Worksheets("sheet1").Copy after:=Worksheets("sheet2") '复制工作表“sheet1”到“sheet2”工作表后面
Worksheets("sheet1").Copy '复制“sheet1”工作表到新的工作簿中
7.移动工作簿:用法与复制相似
8.隐藏工作表:使用Visible属性
9.获取工作表数目:使用Count属性
10.sheets只是Worksheets中的一种,EXCEl中有很多类型的工作表
!Range
1.引用单元格的方法
Range("A1") '用字符串引用单个单元格
Range("A1:B20") '引用一个单元格区域
Range("A1:A10,A4:E6,C3:D9") '引用不连续的区域
Range("A1:A10 A4:E6 C3:D9") '引用公共区域
Range("CellName") '引用已定义名称的单元格或单元格区域
Cells(1,1) 'Cells只能引用单元格不能引用区域,前行后列
Cells(1,"A") '同上
Cells(2) '用单元格的索引来引用
Range("B3:F9").Cells(2,3) '引用B3:F9区域的第二行第三列
Range(Cells(1,1),Cells(2,2)) '可以用Cells做Range的参数
Range("A1","B2") '效果同上
Range(Range("A1"),Range("B2")) '效果同上
Rows(3) '引用第三行
Rows("3:5") '引用第三行到第五行
Columns("F:G") '引用F到G列
Columns(6) '引用第六列
2.可以使用Application的Union方法将多个不连续的单元格区域黏在一起进行操作
3.可以使用Range的Offset属性对单元格进行偏移
4.可以使用Range的Resize属性扩大或缩小单元格的区域
5.Range的UsedRange属性可以引用当前工作表已使用的单元格包围的区域
6.Range的CurrentRegion属性得以引用当前选中单元格的当前区域,就是不包括空行与空列
7.Range的End属性可以返回当前单元格某个方向结尾处的单元格
8.其他简单的属性
-Value:获取单元格中的值
-Count:计算选中单元格区域的单元格个数
-Address:返回单元格的地址,可以选择返回的形式
-Activate/Select:功能都是选中单元格
-各种清除单元格:Clear/ClearComments/ClearContents/ClearFormats
-Copy:复制单元格
-Cut:剪切单元格
-Delete:删除单元格
9.还可以设置单元格的格式:可以先通过录制宏,来查看相关代码
在VBA编辑器中可以使用【F1】来获取帮助
会了以上的内容,就能对EXCEl做一些批量操作了可以满足大部分工作需求。