编写你的第一个 VBA 宏
通过之前的几篇教程,我们已经对 Excel VBA 有了基本的认识,并且已经初步学会使用 VBA 编辑器。如果你还没有阅读,建议先阅读学习。
今天的教程中,介绍如何从零开始,编写一个 VBA 宏,即一个 VBA 过程。建议按照步骤自己动手实践,手动输入代码并运行。
步骤 1 创建启用宏的工作簿
首先新建一个工作簿,并将工作簿保存为「启用宏的工作簿」类型。详细步骤查看这篇文章。
步骤 2 打开 VBA 编辑器
通过功能区「开发工具 → 代码→Visual Basic」或快捷键 Alt + F11 打开 VBA 编辑器。详细步骤参考这篇文章。
步骤 3 插入一个新模块
Excel 工作簿中的 VBA 代码通常保存在工作表对象或模块中。本例中,我们用模块保存 VBA 代码。
首先选中左侧工程列表中的工作簿,后右键,在弹出的选项列表中,选择「插入」。二级菜单中,选择「模块」,完成插入新模块。
插入完成后,在工程列表对应工作簿内,在模块文件夹下,显示新插入的模块。新插入的模块的默认名称是,模块 x,本例中是模块1。在属性窗口,可以修改模块的名称。
步骤 4 打开模块
双击上一步插入的模块1,在右侧代码窗口区域里,将打开模块1的代码编辑器。在右侧代码窗口中当前打开的代码编辑器所对应的模块,在编辑器标题末尾可以看到。
步骤 5 创建一个宏(VBA 过程)
在代码编辑窗口中,输入以下代码:
Sub MyCode()
End Sub
这段代码是一个空的 VBA 过程,只有开始和结束。过程的其他代码,都在这中间编写。
其中 Sub
是 Subroutine 的缩写,直译过来是子程序。在 VBA 中表示一个过程,也是代表一个过程的开始。下一行 End Sub
表示过程的结束。
步骤 6 编写 VBA 过程实体部分
过程的实体部分指的是,真正会被执行的部分。上一步创建的是一个空的 VBA 过程,里面不包含实体代码。虽然可以正常运行,但是不会有结果输出。
这一步我们编写 VBA 过程的实体部分。将如下代码输入到过程的开始和结束处之间。
MsgBox "Hello World"
步骤 7 运行代码
现在我们已经写完了一个完整的 VBA 过程,现在运行它,看一下结果。
将光标放置在代码的任何一处,点击工具栏上的运行「▶ 」按钮,或按 F5,运行代码。
可以看到运行结果,Excel 弹出一个对话框,显示内容正是在代码中编写的内容。
总结
本篇教程介绍了如何从零开始编写 VBA 过程,基本步骤如下:
- 插入模块
- 创建空过程
- 编写过程的实体
- 运行过程
非常好教程,使我敲下人生中第一段代码,谢谢!
博主,我用AI找到了一个宏,
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then
Select Case Target.Value
Case “A”
Target.Value = “08302”
Case “B”
Target.Value = “09004”
Case “C”
Target.Value = “09302”
Case “D”
Target.Value = “10002”
End Select
End If
End Sub
为什么我添加这个宏以后不能正常运行呢?
这是Excel工作表的一个事件过程,需要放置在工作表的代码模块里。如下图:
很详细全面,很有帮助,很赞!
您好,请问“代码编辑窗口”的代码字体大小是否可以调整?因为我看到我的代码字之间的行距很小,但是您的看起来就宽松很多。
可以的,在编辑器工具栏【工具→选项→编辑器格式】中设定。如下图:
非常感谢博主
sub MyCode()
MsgBox “111”
end sub
wps 打出来的双引号总是红色的
需要把输入法调整长半角模式,即英文输入或者开启大写键。
Hello World
作者用的什么截图工具呀?看上去蛮好用的。
用的是Snagit,有很多方便的内置功能
谢谢大神这么详细的教程,希望有一天我也能做出适合自己的VBA
加油,多练习,多实践,肯定没问题的
编译错误,缺少:语句结束,但是最后是有End Sub
是不是有其他语句少写了,可以贴一下代码吗
Sub MyCode()这里的 My Code ()是什么意思?可以替换成任意别的内容吗?
其中 MyCode 是这个程序的名称,可以自己起名字。但是 Sub 和 () 是语法里的关键字和语句,无法修改。
完整语法是:
Sub 过程名字 ()
End Sub
我的运行一直让填入宏名称,显示错误,不知道怎么回事?使用的是WPS
让填入宏名称,可能是因为当前光标在过程外面。另外,显示错误具体内容是什么,可以贴一下吗?
Project-模块:第1行 第4列:
语法错误:Unexpected indentifier
提示上面这个报错是为啥啊,用的WPS,语句是
Sub MyCode()
MsgBox “Hello world”
End Sub
Hello world两边的双引号需要时半角双引号,即英文输入法下的双引号。
创建名称,写的MsgBox,然后就显示的语法错误
MgsBox是内置函数,不能作为自定义过程的名字,换其他名字试一下
WPS只有宏编辑器
页面很相似
但是到运行就不行了,提示是另存为宏
WPS会不会是 JS 环境呢?两者应该是不通用的
Hello 大佬
哈喽啊
谢谢作者~
插入“模块”然后写代码,与不插入“模块”直接双击工程窗口中的”sheet1“也会跳出一个代码编辑的窗口。
这两种有什么差异呢?
这里涉及到模块的不同类别。点击sheet1出来的也是模块的一种,它是Excel VBA 工程默认创建好的模块,表示sheet1的对应模块。与手动插入模块基本类似,也有一些差异。
最典型的,如果省略引用对象的工作表,sheet1模块默认是sheet1工作表;而插入的模块默认是当前激活的工作表。
有一个疑问:
我把代码保存了,再打开为什么它没有提示我要不要运行,也没有直接运行,这是正常情况吗?
正常的。
VBA代码运行需要一个触发,可以手动运行,可以设置自动运行。一般情况下,默认是需要手动运行。
如果想自动运行,需要把代码放到工作簿、工作表等内置对象的打开、激活等事件过程里。
怎么在主页面设置一个按钮,点击一下,就能弹出“Hello world”这样的效果
可以参考这篇文章:https://www.lanrenexcel.com/run-excel-vba-macro/
每次运行的时候都会有提示窗口,文件是在指定信任位置放的,能去掉吗?
还有个问题 你声明的Option Explicit下面的横线是怎么来的
第一个问题,请参考这篇文章(https://www.lanrenexcel.com/vba-macro-saftey-setting/),设置宏安全性。
第二个问题,横线是编辑器自动添加。VBA将每个代码段落后自动添加这样的横线。
厉害 言简意赅
受教了
非常清楚明白
初学者的福利,谢谢作者~笔芯
WPS的VBA好像和这个不太一样,录入之后无法运行,为什么啊
我的可以诶
提示什么错误了吗?
我也是用WPS,同样的情况,可能是WPS的宏性能不够好
嘻嘻,hello world
又学会了一个 Hello World, 哈哈
哈哈哈,太多只学到这步
感觉有点什么的一个提示框
加油