EXCEL 宏与VBA介绍
宏:一连串的执行指令所构成,可以利用Visual Basic程序指令、也可以利用录制宏的方式来录写指令。
如何录制宏:
1.如果要执行宏,则需要更改「EXCEL选项」\「信任中心」
\「信任中心设定」\「宏设定」
2.在「检视」、「宏」/「录制宏」
3.设定「宏名称」、快捷键(Ctrl+英文键),将宏储存位置
4.开始录制相关动作(录制是以绝对地址方式来录制,如果
要以相对地址来录制则要选「以相对位置录制」)
5.停止录制
6.查看宏程序代码,并作必要的修正
7.执行宏(可以利用「执行宏」或快捷键、或利用窗体按钮
来执行)
如果要编修窗体时,可以按下Ctrl+该对象,进行修改。
范例:下载(录制宏)
1.C6至C12的数值格式设定「"进货" #,##0;"出货" #,##0」
2.「检视」、「宏」、「开始录制」,并开始执行下列指令
3.选取范围C6至C12,并执行「复制」
4.选取范围B6至B12,并按下「选择性贴上」,选择贴上「值」与运算「加」
5.选取范围C6至C12,并按下「Del」,清除单元格内容
6.在单元格C6单击
7.停止录制宏
8.在工作表中,产生一个按钮,并指定该按钮执行该宏,并将其按钮文字改为异动
9.每次输入异动数据(正的表示进货,负的表示出货),按下按钮即可执行宏
VBA简介:Visual Basic for Applications,利用VB来延申Office的能力。开启EXCEL 显示开发人员(在「EXCEL选项」/「常用」中勾选),再撰写或修改VBA程序。
VBA主要的组成要件:对象,其中包括
1.属性:对对象状态的描述,可以定义对象的特性(大小、颜色、状态等)。
2.方法:对象的某些特定动作,可以指定动作的细别内容。其主要结构如下:
物件.方法指定自变量1:=xl常数1, 指定自变量2:=xl常数2,.... 指定自变量设定为某些内建常数,每个内建常数前会有关键词连接。
?EXCEL对象的常数会以xl开始。
?VB的语句及函数的常数会以vb开始。
?Office对象模式的常数会以mso开始。
3.事件:对象的触发反应。
EXCEL常用的物件
1.Workbook 活页簿
2.Workbooks 活页簿集合
3.Workbooks("filename") 档名为filename的活页簿
4.ActiveWorkbook 正在作用中的活页簿
5.Sheets 活页簿中所有工作表
6.Sheets(n) 活页簿中第n张工作表
7.Worksheet 工作表
8.Worksheets 所有工作表(包括图表)
9.Worksheets("sheet") 指表名为sheet工作表
10.ActiveSheet 正在作用中的工作表
11.Columns("c1:c2") c1至c2栏(其中c1,c2为A~Z或AA~XFD 等栏名)
12.Rows("r1:r2") r1至r2列(其中r1,r2为1~1048576等列名
13.Range("x1:x2") x1至x2间的单元格(其中x1,x2为单元格地址名称)
14.cells(i,j) 单元格(第i列、第j行)
15.ActiveCell 当前单元格
16.Selection 目前所选取的对象
范例:
o Workbooks("Book1").Sheets("Sheet1").Range("A1:D5").Font.B old = True
o Worksheets("Sheet1").Cells.ClearContents
o Worksheets("Sheet1").Rows(1).Font.Bold = True
o Range("1:1,3:3,8:8")
o Worksheets("Sheet1").Cells(6, 1).Value = 10
o Worksheets("Sheet1").[A1:B5].ClearContents
o ActiveCell.Offset(1, 3).Font.Underline = xlDouble
活页簿常用属性:
o https://www.doczj.com/doc/3d16701438.html, 目前活页簿的名称
o ActiveWorkBook.Save 储存目前的活页簿
o ActiveWorkBook.SaveAs Filename := "filename" 另储新档o WorkBooks.Add 新增活页簿
o WorkBooks(i).Close [SaveChange, Filename, RouteWorkbook] 关闭指定的第i个活页簿
?SaveChange := True 改变储存
?SaveChange := False 不会改变储存
?SaveChange省略时,会出现对话框
?filename := "檔名"
o WorkBooks.Open "filename" 开启一个活页簿
o Application.Windows 所有活页簿窗口
o WorkBooks.Count 活页簿的数量
o WorkBooks.Item(Index) 传回单一活页簿,由索引值指定
工作表常用属性:
o Worksheets.Add [Before, After, Count, Type] 新增工作表
?Before := Worksheets(n) 出现于某工作表之前
?After := Worksheets(n) 出现于某工作表之后
?Count := n 新增工作表数量
?Type := xlWorksheet (工作表) 或xlChart (图表)
o https://www.doczj.com/doc/3d16701438.html, 工作表名称
o WorkSheets("Sheet1").Activate 设定工作表为目前作用的功作表
单元格常用属性:
o Rows.RowHeight 指定范围内的所有列高
o Columns.ColumnsWidth:指定范围内的所栏宽
o expression.NumberFormatLocal 以本地的数字格式
o Range.CurrentRegion 目前区域是指以任意空白列及空白栏的组合为边界的范围
o范例:
o Worksheets("Sheet1").Activate
o ActiveCell.CurrentRegion.Select
o expression.Address(RowAbsolute, ColumnAbsolute, ReferenceStyle, External, RelativeTo) 以参照的方式
?RowAbsolute 为True,则用列的绝对地址
?ColumnAbsolute 为True,则用栏的绝对地址
?ReferenceStyle 默认值为xlA1,如为xlR1C1则为R1C1的表达方式
o expression.count 传回范围的数量(可以是栏数、列数或单元格数量)
o expression.Item(RowIndex, ColumnIndex) 代表相对于指定之范围某个位移距离的范围。
o expression.value 传回或设定对象的值
o expression.Formula 传回或设定对象的公式,代表A1 样式批注以及宏语言中的对象公式。
范例:Worksheets("Sheet1").Range("A1").Formula = "=$A$4+$A$10" o expression.FormulaR1C1 传回或设定对象的公式,并以宏语言中的R1C1 样式表示法表示
范例:Worksheets("Sheet1").Range("B1").FormulaR1C1 =
"=SQRT(R1C1)"
o expression.Text 传回或设定对象的文字
o范例:
o Set c = Worksheets("Sheet1").Range("B14")
o c.Value = 1198.3
o c.NumberFormat = "$#,##0_);($#,##0)"
o MsgBox c.Value
o MsgBox c.Text
常用方法:
o Range.Select方法/Selection属性设定目前选取的范围/使用目前所选取的范围
o范例:
o Sub Macro1()
o Sheets("Sheet1").Select
o Range("A1").Select
o ActiveCell.FormulaR1C1 = "Name"
o Range("B1").Select
o ActiveCell.FormulaR1C1 = "Address"
o Range("A1:B1").Select
o Selection.Font.Bold = True
o End Sub
o expression.Copy 将目前所选取的对象复制至剪贴簿o expression.Cut 将目前所选取的对象剪下
o expression.Delete 将目前所选取的对象删除
o expression.Paste 将剪贴簿的内容贴上
o范例:
o Sub CopyRow()
o Worksheets("Sheet1").Rows(1).Copy
o Worksheets("Sheet2").Select
o Worksheets("Sheet2").Rows(1).Select
o Worksheets("Sheet2").Paste
o End Sub
o expression.RasteSpecial(Paste,Operation, SkipBlanks, Transpose)
o范例:
o With Worksheets("Sheet1")
o .Range("C1:C5").Copy
o .Range("D1:D5").PasteSpecial _
o Operation:=xlPasteSpecialOperationAdd o End With
o Range.Activate 当前单元格
o Range.Clear 清除资料
o Range.ClearContents 清除数据内容
o Range.ClearFormats 清除数据格式
o Range.ClearComments 清除批注
o expression.AutoFit:自动调整列高和栏宽
o Range.FillDown、Range.FillUp、Range.FillLeft、Range.FillRight 填满
o Range.Offset (RowOffset, ColumnOffset) 指定区域的位移列与行
o范例:
o Sub MoveActive()
o Worksheets("Sheet1").Activate
o Range("A1:D10").Select
o ActiveCell.Value = "Monthly Totals"
o ActiveCell.Offset(0, 1).Activate
o End Sub
程序语法:
Dim 语句(变数)
Dim varname [ As [New] type]
type 包括Byte、Boolean、Integer、Long、Single、Double、Date、String、Object等
Set 语句(物件)
Set objectvar = {[New] objectexpression | Nothing}
例:Set RangeA = Range("A1:B2")
范例:
Sub Random()
Dim myRange As Range
Set myRange = Worksheets("Sheet1").Range("A1:D5")
myRange.Formula = "=RAND()"
myRange.Font.Bold = True
End Sub
?With 多种属性设定
With 物件
.属性1 = 设定值
.属性2 = 设定值
.... End With
范例:
Sub AddNew()
Set NewBook = Workbooks.Add
With NewBook
.Title = "All Sales"
.Subject = "Sales"
.SaveAs Filename:="Allsales.xls" End With
End Sub
?Array 数组
Array(Range1, Range2, ....)
范例:
Sub Several()
Worksheets(Array("Sheet1", "Sheet2", "Sheet4")).Select End Sub
?InputBox 函数
InputBox("文字说明",[,title][,default][,xpos][,ypos][,helpfile, context])
?MsgBox 函数
MsgBox "文字说明"
?Union 将多个范围合并成单一Range对象Union(Range1, Range2, ...)
范例:
Sub MultipleRange()
Dim r1, r2, myMultipleRange As Range
Set r1 = Sheets("Sheet1").Range("A1:B2") Set r2 = Sheets("Sheet1").Range("C3:D4") Set myMultipleRange = Union(r1, r2)
myMultipleRange.Font.Bold = True
End Sub
?For... Next 语句
For counter = start to end [ step stepvalue] [statements]
[Exit For]
[statements]
Next [counter]
范例:
Sub CycleThrough()
Dim Counter As Integer
For Counter = 1 To 20
Worksheets("Sheet1").Cells(Counter, 3).Value = Counter Next Counter
End Sub
For Each... Next 语句
For Each element In group
[statements]
[Exit For]
[statements]
Next [element]
范例:
Sub ApplyColor()
Const Limit As Integer = 25
For Each c In Range("MyRange")
If c.Value > Limit Then
c.Interior.ColorIndex = 27
End If
Next c
End Sub
Do ... Loop 语句
Do [{While | Until} condition] [statements]
[Exit Do]
[statements]
Loop
或
Do
[statements]
[Exit Do]
[statements]
Loop [{While | Until} condition]
If ... Then ... Else ... 语句
If condition Then [statements][Else elsestatements] 或
If condition Then
[statements]
[ElseIf condition-n Then [elseifstatements]...
[Else
[elsestatements]]
End If
?
?
?
?范例:下载(VBA程序范例)