在 Excel 众多的概念中,VBA 是最重要也是最难学的一部分。如果涉及到数据处理工作,VBA 几乎可以实现任何功能,从简单的数据处理,到批量数据分析,再到与 Office 其他软件交互,甚至与操作系统交互实现复杂的功能,VBA 几乎都可以胜任。
那么什么是 Excel VBA,如何学习它,懒人Excel 带你进入 VBA 的世界,从最基础的部分开始讲起,一步一步入门到精通,写出自己的 VBA 程序。
什么是 Excel VBA?
首先,第一个问题,什么是 VBA?
Visual Basic for Applications(VBA)是 VisualBasic 的一种宏语言,是微软开发出来在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。主要能用来扩展 Windows 的应用程序功能,特别是Microsoft Office软件。
以上是 VBA 的百科定义,说简单点,VBA 是运行在 Microsoft Office 软件之上,可以用来编写非软件自带的功能的编程语言。Office 软件提供丰富的功能接口,VBA 可以调用它们,实现自定义的需求。基本上,能用鼠标和键盘能做的事情,VBA 也能做。
正如前文所述,VBA 可以运行在 Office 软件上,包括 Excel、Word、PPT、Outlook 等。VBA 语言在 Office 软件中是通用的,基本语法和用法都相同。但是每一个软件具有自己独有的对象,例如 Excel 有单元格对象,Word 有段落对象,PPT 有幻灯片对象。
回到 Excel VBA,用它可以编写自定义函数,插入任意图表、批量处理大量数据单元格,编写插件自动化工作。甚至可以编写基于 Excel 的复杂的管理系统,其功能可以媲美桌面软件。
在本系列教程中,我们学习 VBA 语言语法和 Excel 特有的对象的使用。在往后的教程中,如没有特殊说明,文章提到的 VBA 指的是 Excel VBA。
VBA 与宏有什么区别?
在学习 VBA 过程中,经常会出现一个说法,「宏」。简单的说,宏是一段可以运行的 VBA 代码片段,也可以说是一个简称,并没有特别的不同之处。所以学习 VBA 时,不用纠结于两者到底有什么区别,只需要记住一点,宏是使用 VBA 编写的一段代码片段。
学习 Excel VBA 有什么用处?
前面我们说到,Excel 中,VBA 几乎可以实现任何功能,从简单的数据处理,到批量数据分析,再到与 Office 其他软件交互,甚至与操作系统交互实现复杂的功能,VBA 几乎都可以胜任。以下是 Excel VBA 几个典型的用途。
- 节省时间:只需一次点击就可以重复执行任意数量的操作。例如,现在要新建 20 个工作表,手动操作可能需要一分钟的时间。使用 VBA 只需一秒即可。
- 自动化任务:只需一次点击就可以按预先设置好的步骤,自动完成操作。例如,插入一个图表并设调整格式,根据其复杂程度,可能需要多达几分钟时间。而使用VBA编写调整步骤,一次点击,几秒内即可完成所有的操作。
- 减少错误:相比于手动操作出现的错误,只要正确编写 VBA 代码,执行过程中就不会出现错误。例如,从一区域中筛选指定数据,并复制到另外一个位置,手动操作可能会出现漏选的可能。但是使用 VBA,极短的时间内正确无误的完成操作。
- 与其他软件交互:使用 VBA,可以在 Excel 里创建、更新 Word、PPT 等文件。还可以与系统交互,做到复制、移动、重命名其他文件等操作,无需打开其他文件。
Excel VBA 基础
- Excel VBA 中的 10 个基本概念(熟悉 VBA 中的基本概念)
- 启用 Excel 开发工具教程(准备 VBA 开发工具)
- 如何打开 Excel VBA 编辑器?(三种方法打开编辑器)
- Excel VBA 设置宏安全性(正确设置 VBA 开发安全选项)
- Excel 保存包含 VBA 代码的工作簿(使用指定类型保存含 VBA 代码的工作簿)
- 使用 VBA 编辑器进行 Excel VBA 开发(熟悉 VBA 开发工具的用法)
- 编写你的第一个 VBA 宏(基础实战练习)
- Excel 录制宏并查看宏代码(写 VBA 代码的技巧)
- Excel 中如何运行 VBA 代码?(从工作表运行 VBA 代码)
VBA 变量、类型、运算符
- VBA 变量基础教程(VBA 核心概念)
- VBA 常量基础教程(基础概念)
- VBA 运算符基础教程(加减乘除+高级操作)
- VBA 数据类型基础教程(程序更高效、更精准)
VBA 程序结构
- VBA 程序结构入门(认识 VBA 程序骨架)
- VBA 表达式和语句(最基本的程序单元)
- VBA 变量的声明和赋值(是程序动起来)
- VBA 程序顺序结构(VBA 程序默认执行顺序)
- VBA 程序选择结构(选择性的执行 VBA 代码)
- VBA 程序循环结构(重复执行一段代码)
- VBA With 结构(简化程序书写)
- VBA GoTo 结构(程序之间跳转执行)
- VBA 注释教程和实例(使程序更容易阅读和理解)
VBA 过程和函数 (Sub | Function)
- VBA 过程(Sub) 入门教程和实例(组织代码的容器)
- VBA 函数(Function)入门教程和实例(重复使用相同代码)
- VBA 函数与过程的 6 个不同点(正确使用过程和函数)
- VBA 过程和函数:传递参数教程和实例(正确定义和调用带参数的过程和函数)
- VBA 中 ByVal 和 ByRef 的基础用法和区别(学会正确传递参数)
- VBA 变量作用域
- VBA 过程或函数作用域
求从一个工作表提取不同的数据分别导入两个表里的代码
使用Worksheet对象的Range对象可以获取指定单元格的值,再写回到其他工作表的指定单元格,具体用法请参考:
https://learn.microsoft.com/zh-cn/office/vba/api/excel.range(object)
想问一下,除了那些教程,有没有实际操作的例子能分享一下?
好呢,后续会分享实际例子
好,很好
在网上找了很多VBA教程,这个网站的,是我遇到的写的最好的,感谢!
不孬。
全面,精彩
叙述清晰,排版美观!本文目录这些文章一口气看完了,很有收获,感谢作者!
通过使用VBA制作宏,实现Excel十字光标,接触到VBA,感觉非常Nice,值得学习一下子,本网址介绍的太好了,非常详细,非常棒
很实用啊,谢啦
等后续更新啊讲讲数组和对象,秋梨膏~!
宝藏网站呀,赞赞赞!
感谢
还会有更新吗
会更新,后面会补充更多基础内容
请教一下:
服务器 win10 +sql2008
客户端 win10 + office2013
客户端直接用SQL链接的话,没问题
VBA链接数据库报错。
Provider=SQLOLEDB;Password=XXXX;User ID=sa;Data Source = 192.168.7.88,1433;Initial Catalog=XX
错误代码:-2147467259
: Description : “无法打开登录所请求的数据库 “SY”。登录失败。” : String : 模块1.DBSearch
: HelpContext : 1000440 : Long : 模块1.DBSearch
: HelpFile : “C:\PROGRA~2\COMMON~1\MICROS~1\VBA\VBA7.1\2052\VbLR6.chm” : String : 模块1.DBSearch
: LastDllError : 0 : Long : 模块1.DBSearch
: Number : -2147467259 : Long : 模块1.DBSearch
: Source : “Microsoft OLE DB Provider for SQL Server” : String : 模块1.DBSearch
你这是账户或者密码不对,再或者是sa账户没开远程权限
抱歉,目前对连接数据库不是很懂,我怀疑连接字符串可能有问题,具体参考一下这个网站:https://www.connectionstrings.com/ole-db-driver-for-sql-server/
作者大大有微信交流群嗎
这个没有的,群交流无效信息很多,怕浪费大家时间。有问题可以加我个人微信咨询:office-guy
这教程太优秀了..
好
想不到你还有个网站
太棒了
太棒了~
请问如何下载呢?
Excel还是VBA环境?安装Office时,需要勾选VBA环境。
你好,大佬,想问下,有没有实用的已经造好的VBA插件轮子推荐,或者哪里网站有?
我把自己知道整理一下,到时候单独做一天页面,供大家查阅。
简单易懂网站界面也好看,牛牛牛!
太强了!
很好的网站,学习中!
大佬 我想问一下excel无法加载VBA 无法记录宏,EXCEL加载项都添加不了分析工具库-VBA,有弹窗显示可能文件名称错误或被其他程序占用,未显示被什么程序占用,请问要怎么解决?感谢!
这个可能在安装office时没有勾选VBA环境。建议还是重装office
希望更新完这些大致的结构 能完善一下实战 比如怎么调用单元格的数据 怎么创建新行 新列新工作表 等等,不然看完教程感觉大体了解了 实际上自己想动手 发现不会引用 也不会用什么函数 关键字之类的操作对象
感谢建议。确实,目前教程是理论居多,后续结合一些实际的例子,介绍VBA实际用法。
懒人excel真是一众网页的清流!开源、没有广告、即时更新,课程设置也很科学。不知我作为使用者,如何可以支持网页进一步发展呢?有运营基金之类的捐款入口吗?方便的话请回复给我的邮箱,谢谢。
感谢肯定,努力做到更好,更新更多内容。可以加我微信交流(office-guy)
后续可以详细介绍一下VBA的工程部分吗 比如说 工作簿 工作表 代码是通用的还是工作表独立的 如果一个页面写多个sub函数会怎么样 以及用户窗体 模块 类模块什么的 希望都可以介绍一下
对,这部分也是一个重点。看似编辑器和工程部分简单,随手打开就能写。但是想真正高效编写代码以及使用,对编辑器和代码工程也需要了解。
希望可以在网站右边新增一个关键字 数据类型 各种语法结构和各种可用函数的目录 只需要做简单介绍就行 看到不懂的地方点一下可以直接跳转过去 然后加一个返回按钮 可以直接返回原来的地方 而且不用滚动
感谢建议,我们评估一下
你好,文章非常實用。但可否教教如何使用vba editor , 不太會用。不知道模組,表單,物件混合使用。寫了code都無法順利運行。
收到建议,后续增加VBA编辑器相关内容。
感谢建议,以后会持续添加相关教程和案例
可以用vba自动生成产品检验报告吗,一次生成多个不同的报告
可以的,只要数据和规则制定好,就可以一次性执行多个动作,也就可以生成多个报告。具体可以微信咨询(office-guy)
谢谢回复,我不想做伸手党,所以也在尝试学习
来催更了!
pure,good,but no gong zhong hao?
have gong zhong hao , just search [懒人Excel] in wechat
gei zhe ge hui fu dian zan, lol
laugh out loud
我还以为作者不更新了
还不更新
期待excel对象的讲解
通俗易懂,写的真是不错!!
请问,是不是还没完? ByVal和ByRef对对象的差异还没讲呢
还没完,后面会更新
咱么用宏调用excel表里面的数据呀
暂时没有详细介绍的,后面将持续增加
给变量赋值,必须在Sub里或者Function中么,例如:
Option Explicit
Public ws As Sheets
Set ws = Sheet1
Public P2 As Double
P2 = ws.Cells(2,3)
Sub text()
ws.Cells(2,3) = 3
Msgbox P2
End Sub
这样在过程之外赋值就不行。
是的,VBA会弹出【无效的外部过程】编译错误。
同一网络下,你这网址为啥有的电脑能打开,换另一台电脑就打不开了呀?昨天还能打开的今天就不行了。
可能是服务器的问题,访问的人多了,服务器开始吃力了。后面考虑升级一下
请问excel获取网站多页数据需要学习什么知识,这里有教程吗?
本站暂时没发布相关内容。
如果目标网站的数据是以json形式返回,可以以VBA+JSON关键词搜索一下相关内容;如果是普通的HTML内容,以VBA+网页关键词搜索一下。
可以做excel报表吗
可以做啊,而且VBA做报表更强大
很好,再次学习了。
大神,怎么在excel中每一行单独实现累积相加,已经设置迭代计算,但在C3输入一后,D2数值会变化,我想相互独立
需求描述的不是很清楚,可以结合实际的单元格区域结构具体说一下需求吗?
请问怎么自动根据项目编号日期+四位序号生成“单据编号”
这个需求中,编号和日期是固定的,核心是四位序号。为了保证生成的单据编号的唯一性,需要生成当天内的四位唯一数字。
一个思路是,每次生成四位数,用countif函数数当天的单据,基础上+1处理;
请问怎么从Word导入指定内容到Excel
这个应该是可以做到,但是我目前还没有研究Word的对象模型,后续看情况出Word VBA 系列文章。
请问要如何撰写成绩排名的代码?
可以说一下具体的需求吗?数据结构是怎么样的?
还更新吗!
更新更新
赞赞赞,一口气看完啦!期待更新!!!
一口气看完vba,看着发现后面没了,大佬加油!!!