一、Excel宏简介
1、什么是宏:
宏是记录Excel一个或多个动作的代码程序,跟手动操作效果一样。
2、设置“开发人员选项”
在“选项”——“自定义功能区”——“主选项卡”下勾选“开发人员选项即可”
3、宏的安全性:
excel 2003版本之前,Excel工作簿.xls时可以同时保存数据和宏代码的,但是从2007版本以上,微软将数据文件.xlsx和宏代码文件.xlsm分离。所以想保存宏代码,必须将文档另存为可以保存宏代码的文档类型.xls或xlsm
含有宏代码的工作簿保存时会提示“请注意!您的文档的部分内容可能包含文档检查器无法删除的个人信息”
解决办法:在“选项”——“信任中心”——“信任中心设置”——“隐私选项”——“文档特定设置”下,去掉“保存时从文件属性中删除个人信息”
在“宏设置”里设置宏的安全级别
也可以增加信任设置,可以 按“发布者”、“位置”、“文档”、“目录”等进行设置。
5、个人宏工作簿
C:\Users\bjp-dt-wuzh\AppData\Roaming\Microsoft\Excel\XLSTART\PERSONAL.XLSB
在个人宏工作簿下的宏每次打开Excel时会同时打开,如果想不打开,可以再PERSONAL.XLSB文件中设置隐藏(在“视图”选项卡下)
在操作工作簿时想调用个人宏工作簿,在当前工作簿“视图”选项卡下点“取消隐藏”即可。
二、录制宏
1、相对引用与绝对引用
绝对引用不受活动单元格位置的影响。
Sub 相对引用() \'表示从活动单元格向上移动6行,向左移动一列后得到“区域”的“A1”第一个单元格。 ActiveCell.Offset(-6, -1).Range("A1").Select End Sub Sub 绝对引用() Range("C3").Select End Sub
2、宏的编辑
打开VBE,共有三种方法:
- 使用快捷键“Alt+F8”;
- “查看宏”——“编辑”
- “鼠标右键工作表名称sheet1”——“查看代码”
3、宏的执行
- “查看宏”——选择“宏”——执行
- 快捷键启用宏
- 通过“形状”启动宏(绑定形状,Alt+鼠标拖动,这样形状会根据单元格大小自动调整):添加形状到单元格后,鼠标右键——“指定宏”
- 通过“快速访问工具栏”——“从下列位置选择命令”——“宏”,并可通过“修改(M)”修改显示图标。
4、宏的顺序选择
定位区域与录制宏 先后顺序不同
选择后录取:不会受单元格的约束
录制后选择:受单元格约束,多一行代码,Range(B5:B7").select
5、调试
在VBE中“调试”——“逐语句”,或者按快捷键F8
6、宏的高级语法:If判断语句
Sub 增加或取消会计双下划线() If Selection.Font.Underline = xlUnderlineStyleDoubleAccounting Then Selection.Font.Underline = xlUnderlineStyleNone Else Selection.Font.Underline = xlUnderlineStyleDoubleAccounting End If ActiveWorkbook.Save End Sub
7、宏的高级语法:For-Next
Sub 循环执行特定动作() Range("B3").Select ActiveCell.Range("A1:C2").Select For counter = 1 To 4 Selection.Font.Bold = True ActiveCell.Offset(2, 0).Range("A1:C2").Select Selection.Font.Italic = True ActiveCell.Offset(2, 0).Range("A1:C2").Select Next counter End Sub
8、宏的高级语法:Do-While
Sub 循环执行特定动作() Range("B3").Select ActiveCell.Range("A1:C2").Select \'遇到空格就退出 Do While ActiveCell <> "" Selection.Font.Bold = True ActiveCell.Offset(2, 0).Range("A1:C2").Select Selection.Font.Italic = True ActiveCell.Offset(2, 0).Range("A1:C2").Select Loop End Sub
9、宏的高级语法:Do-Until
Sub 循环执行特定动作() Range("B3").Select ActiveCell.Range("A1:C2").Select \'Do Until ActiveCell = "" 等价于下一行 Do Until IsEmpty(ActiveCell) Selection.Font.Bold = True ActiveCell.Offset(2, 0).Range("A1:C2").Select Selection.Font.Italic = True ActiveCell.Offset(2, 0).Range("A1:C2").Select Loop End Sub
10、宏的高级语法:Input
Sub 循环执行特定动作() worksheetname = InputBox("请输入工作表sheet名称:", "选择对话框") Worksheets(worksheetname).Activate End Sub
11、宏的高级语法:组合宏
Sub 转置() \' \' 转置 宏 \' \'1.如下是转置的宏 Application.ScreenUpdating = False Range("B1").Select ActiveCell.Range("A1:A6").Select Do Until IsEmpty(ActiveCell) Selection.Copy ActiveCell.Offset(0, 2).Range("A1").Select Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True ActiveCell.Offset(6, -2).Range("A1:A6").Select Application.CutCopyMode = False Loop \'2.如下是删除空格的宏 Columns("D:I").Select ActiveWorkbook.Worksheets("转置 (2)").Sort.SortFields.Clear ActiveWorkbook.Worksheets("转置 (2)").Sort.SortFields.Add2 Key:=Range("D1"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("转置 (2)").Sort .SetRange Range("D1:I24") .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Range("D1:I1").Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Range("A1:A6").Select Selection.Copy Range("D1").Select Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Columns("D:I").Select Columns("D:I").EntireColumn.AutoFit Range("D1").Select End Sub
12、宏的高级语法:异常处理
Sub 循环执行特定动作() \'On Error Resume Next \'跳过异常 On Error GoTo MyErr worksheetname = InputBox("请输入工作表sheet名称:", "选择对话框") Worksheets(worksheetname).Activate MyErr: \'MsgBox " 错误 " & Err.Number & " : " & Err.Description Resume Next End Sub