wzh313

 

一、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

 

分类:

技术点:

相关文章: