VBA入门:搞懂这四个对象,Excel就该听你的话了
VBA入门:搞懂这四个对象,Excel就该听你的话了
很多人一听VBA就头大。但其实吧,难点不在语法——你只是不知道该跟谁说话。
打开Excel,满眼都是表格、单元格、标签页、文件窗口。这些玩意儿在VBA里统称”对象”(Object)。写代码的本质?就是跟这帮对象下达指令。
今天只介绍四号人物。搞懂它们,80%的Excel自动化你都能拿捏。
先搞清楚:谁是谁的领导
Excel的对象不是散着的,它们有一张清晰的组织架构图:
Application(Excel本人) └── Workbook(一个.xlsx文件) └── Worksheet(文件里的一张表) └── Range(表里的单元格或区域)
从上到下,一层套一层。 类似公司架构——集团管子公司,子公司管部门,部门管打工人。
想操作”报告.xlsx”里Sheet1的A1单元格?你得顺着层级一路找过去:
Application.Workbooks("报告.xlsx").Worksheets("Sheet1").Range("A1")
好在Excel不强迫你每次都说全名,省略上下文也行:
Sheets("Sheet1").Range("A1") ' 懂的都懂
偷懒是程序员的美德,但前提是你知道全称长什么样。
四号人物,逐一登场
① Application —— Excel本尊
老大,统管全局。
啥时候找它: 需要调Excel的”系统设置”时。
Application.ScreenUpdating = False' 关掉屏幕刷新——代码跑起来飞快Application.DisplayAlerts = False' 关掉烦人的弹窗——别打断自动流程Application.Calculation = xlManual ' 改成手动计算——批量填数不卡顿' ...一顿操作猛如虎...Application.ScreenUpdating = True' 别忘了恢复!
🧠 记住这套三件套。 关刷新+关弹窗+手动计算,几乎所有正式的VBA宏都会这么开篇。跑完记得把设置还回去,不然你手动用Excel时会一脸懵——”咦,怎么不刷新了?”
② Workbook —— 一个Excel文件
就是硬盘上那个 .xlsx。
有个坑很多人踩过:
|
|
|
|---|---|
ThisWorkbook |
|
ActiveWorkbook |
|
它俩经常不是同一个!如果你以为ActiveWorkbook就是ThisWorkbook,可能会改错文件。别问我怎么知道的 😅
Workbooks.Add ' 新建一个Workbooks.Open("C:\数据\销售.xlsx") ' 打开一个ActiveWorkbook.Save ' 存一下ActiveWorkbook.Close SaveChanges:=True' 存了再关
用法就跟你在资源管理器里双击、Ctrl+S、关窗口一模一样。
③ Worksheet —— 底部的标签页
Sheet1、Sheet2、你手贱改名叫”不要删”的那个,都是它。
' 三种叫法,效果相同Worksheets("汇总表") ' 喊名字Worksheets(1) ' 报序号Sheets("汇总表") ' 也能用' 常用招式Sheets.Add After:=Sheets(Sheets.Count) ' 在最末尾加一张新表Sheets("草稿").Visible = xlSheetHidden ' 隐藏起来,不删但看不见Sheets(1).Name = "数据源"' 改名
💡 小贴士:
Sheets和Worksheets不完全是一回事。Sheets会把图表页也数进去,Worksheets只认表格。日常随便用问题不大,写严谨的代码建议用Worksheets。
④ Range —— 单元格区域
全村的希望,出场率最高的对象,没有之一。 你对Excel干的事,最终基本都落在单元格上。
' 怎么指Range("A1") ' 单个格子Range("A1:D10") ' 一整块Range("A1,A3,A5") ' 挑几个不挨着的Cells(1, 1) ' 第1行第1列,也就是A1——适合写循环Cells(Rows.Count, 1).End(xlUp) ' 神技:找到A列最后有数据的行号' 读写Range("B2").Value = "已完成"' 写进去total = Range("B2:B100").Value ' 读出来(返回数组,比循环快得多)' 偏移和缩放——动态定位的好帮手Range("A1").Offset(1, 0) ' A1往下挪一格 → A2Range("A1").Resize(3, 4) ' 从A1扩展成3行4列的块
来个真家伙:12个月工资表一键汇总
假设你有12个工资文件,每个月一个 .xlsx,要把所有人的全年数据合成一张总表。
手动操作?打开、复制、粘贴、关掉,重复12次,大概半小时。
用VBA?3秒。
Sub 汇全年工资()Dim wb As Workbook, ws As WorksheetDim lastRow AsLong Application.ScreenUpdating = False' 🚀 开启加速模式 Application.DisplayAlerts = FalseSet ws = ThisWorkbook.Sheets("全年汇总") ws.Cells.ClearContents ' 先清场For m = 1To12Set wb = Workbooks.Open("C:\工资\" & m & "月.xlsx") lastRow = wb.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row' 把数据贴到汇总表末尾 wb.Sheets(1).Range("A2:D" & lastRow).Copy _ Destination:=ws.Cells(ws.Rows.Count, 1).End(xlUp).Offset(1, 0) wb.Close False' 不保存,利落关掉Next m Application.ScreenUpdating = True MsgBox "搞定!12个文件已汇总 ✌️", vbInformationEndSub
用人话翻译一下这段代码在干嘛:
-
🔧 先把Excel调到”高性能模式”(关刷新、关弹窗) -
🧹 清空汇总表,腾出位置 -
🔄 逐个打开1-12月的工资文件 -
📋 找到每张表的最后一行,复制数据,贴到汇总表尾部 -
❌ 用完就关,不保存月度文件 -
✅ 恢复设置,弹个窗告诉你”活干完了”
代码看着长,其实逻辑跟你自己手动操作完全一样。只不过电脑比你快,而且不会手抖贴错位置。
最快上手方式:别从零写,先偷代码
这是我觉得最实用的入门技巧:
-
Excel里按 Alt + T → M → R开启宏录制 -
手动完成你想要的操作(比如格式化、筛选、算数据) -
停止录制,按 Alt + F11打开VBA编辑器看代码 -
录出来的代码虽然啰嗦,但用的对象和方法全是正确的 -
删掉多余的废话,留下核心逻辑——属于你的VBA就诞生了
录三次宏你就会发现:翻来覆去就是那四个对象、那几个方法。根本不用背,用着用着就记住了。
📚 想系统学: 推荐《别怕,Excel VBA其实很简单》,对象体系讲得很通透。
🎮 现在就试: 打开任意Excel,按 Alt + F11 进编辑器,在立即窗口(Ctrl+G)里敲:
Range("A1").Value
按回车。恭喜——你刚刚就用代码跟Excel”对话”了 🎉
夜雨聆风