1.VBA的本质

VBA本质只解决效率问题,不能解决创造问题

  1. VBA的本质就是利用代码去完成批量操作,或遵循某种规律完成的工作。前提是通过手工的方式能够完成工作,只是效率低而已;
  2. 思维和逻辑问题代码无法解决

2.VBA代码写在哪里、如何保存

2.1 代码的产生

  1. 手写代码
  2. 复制现成代码
  3. 录制宏
    1. 录制宏时要注意在录制过程中绝对引用和相对引用的区别
    2. 录制宏绝对是vba中YYDS的功能,它使得vba非常容易上手,且不用记过多的属性和方法。只需要利用好框架即可。

2.2 代码的存储位置

2.2.1 VBE窗口的打开方式

  1. Alt+F11
  2. 开发工具-Visual Basic
  3. 工作表右键-查看代码

image.png

2.2.2 代码的存储位置

  1. 存储在sheet中
  2. 存储在ThisWorkbook中
  3. 存储在模块中

    2.3 EXCEL的文件格式

    第1章:VBA基础 - 图2

    2.4 快捷键的使用

  4. 打开VBE界面:Alt+F11

  5. 全部执行:F5
  6. 代码逐句执行:F8
  7. 手动终止代码:Ctrl+Break

    (1)代码的逐句执行一般和本地窗口配合查看运行过程中变量值得变化情况,一般用于纠错; (2)手动终止代码一般为写了死循环后的主动终止

2.5 代码的放行

  1. 在弹出的安全警告中点击启用内容;
  2. 选项-信用中心-宏设置中启用VBA宏;
  3. 选项-信用中心-受信任位置中添加信任路径;

3.调试

  1. 不建议调试的时候用msgbox,建议使用Debug.PrintDebug.Print的结果会显示在立即窗口

image.png

  1. 也可以在立即窗口中输入?表达式输出表达式结果

image.png

4.VBA的程序结构组成

  1. project:在VBA中,每一个workbook都是一个VBAProject
  2. module:每一个project中可以存储多个module。module用于存储process使用
  3. prosess:一般代码都写在process中

    project和module是容器,用于乘装process

:::info image.png
图中有两个VBAProject,1个模块和2个名字为宏1和宏2的过程 :::

5.过程

5.1 过程的分类

过程是VBA的最小运行单元

5.1.1 按照过程的性质分类

  1. 子过程:子过程Sub开头 ```vbnet Sub 宏1()

    msgbox “hello world!”

End sub

  1. 2. 函数过程:函数过程一般都含有参数,`Function`开头
  2. 3. 属性过程:属性过程一般用于定义类,`Property`开头
  3. <a name="Ply9O"></a>
  4. ### 5.1.2 按照过程的作用范围分类
  5. 作用范围相关内容不仅一般子过程受用,函数过程和属性过程同样受用
  6. 1. 私有过程`Private Sub`
  7. 2. 公有过程`Sub``Public Sub`
  8. > 私有过程仅限当前模块调用,公有过程任何模块都可以调用
  9. <a name="qS2Tj"></a>
  10. ## 5.2 过程代码的运行方式
  11. 1. **在代码区执行,如:F5执行,F8执行等**
  12. 2. **Alt+F8执行**
  13. > private私有过程,含有参数的过程、函数过程及隐藏模块中的过程无法通过此方式执行
  14. ![image.png](https://cdn.nlark.com/yuque/0/2022/png/389342/1666019477228-84a847aa-cb21-437d-8802-50e17508e106.png#averageHue=%23f2f2f1&clientId=u843451d1-d07b-4&from=paste&height=515&id=udd1524d3&originHeight=463&originWidth=442&originalType=binary&ratio=1&rotation=0&showTitle=false&size=15113&status=done&style=none&taskId=u9be76084-bdc8-4af5-88b3-e2a9a8fe150&title=&width=491.65625)
  15. 3. **插入表单按钮指定宏后,单击执行**
  16. 4. **插入ActiveX控件,将代码写入控件的事件中后单击执行**
  17. ```vbnet
  18. Private Sub CommandButton1_Click()
  19. [A1] = Now
  20. End Sub
  1. 通过事件调用

一般情况,过程的调用用call关键字,call关键字也可以省略

过程调用的本质就是把被调用过程的代码复制到调用处

  1. Sub 1()
  2. Range("A1").FormulaR1C1 = "2022-10-17"
  3. Range("B1").FormulaR1C1 = "2022-10-18"
  4. Range("C1").FormulaR1C1 = "2022-10-19"
  5. call 2
  6. End sub
  7. -----------------------------------------------------------------
  8. Sub 2()
  9. Range("B1").ClearContents
  10. End sub
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2. Call 1
  3. End Sub
  1. 跨工作簿(工程)调用宏

Application.Run

  1. 功能区手动添加
  2. 代码添加加载宏按钮