
简介《EXCEL VBA常用代码实战大全》面向希望系统学习 Excel VBA 编程入门与常用技巧的办公人员和初学者围绕单元格对象、区域选取、数据定位查找、复制粘贴与自动化处理等高频场景展开帮助读者把重复操作转化为可复用代码。压缩包共 1 个 docx 文件约 15.12MB以文档形式集中收录常用技巧解析便于按章节检索和边练边查。涵盖 Range、Cells、Offset、Resize、Union、UsedRange、CurrentRegion 等对象用法也讲解 Select、Activate、Goto、Find、FindNext、Like 运算符、选择性粘贴与禁用拖放并延伸到循环、条件判断、With 语句、错误处理、数组和用户窗体。已有 2071 人学习适合入门与日常速查。1. 从一张每月重做一遍的表格说起VBA 到底能替你干什么很多人搜 Excel VBA编程入门范例起因都很具体手里有一张每个月都要重做一遍的表复制、粘贴、调格式、再另存一份一套下来半小时做完还总担心漏了几行。你隐约知道这类活儿能交给代码可打开 Excel 又找不到写代码的地方于是每次都在「要不要学」和「算了下次吧」之间来回摇摆。这份资源正是为这个阶段准备的。它把 VBA 里最常用的操作按单元格、工作表、工作簿、图形图表、应用程序几个层次拆成一条条可以直接抄用的代码片段不要求你先啃完一门语言。它适合每天跟表格打交道、没有编程基础、想先把重复动作交给机器的人也适合学过一点语法但一动手就报错的人。下面按「先懂是什么、再跑第一个例子、然后按地图扩展、最后避开坑」的顺序带你走一遍。2. 先搞懂一个概念VBA 到底是住在表格里的什么2.1 它不是一门要学完才能用的语言零基础的人最大的误解是把 VBA 当成一门要系统学完才能碰的语言。事实相反VBA 是内置在 Excel 里的一套指令系统你不需要安装任何东西也不需要配置环境新建一个文件就能写。它更像电饭煲上的预约键——你不需要懂电路只要知道按哪个键、按几下饭就会在指定时间煮好。配套的另一个词是「宏」。宏可以理解成录音机你按下录制然后手动做一遍操作Excel 会把这一串动作记下来下次一键重放。录制出来的东西本质就是 VBA 代码只不过写得又长又笨。大多数人入门 VBA 的真实路径是先录一段宏打开看看它生成了什么再动手把那堆啰嗦的代码删减、改条件、加循环。这条路比从语法第一页开始读要快得多也更容易坚持。所以入门阶段的目标不是「学会 VBA」而是「攒下二十个能直接改改就用的片段」。这份资源的价值就在这里它把常用片段按场景归好了类你遇到问题时按场景去翻而不是从第一章顺着读。2.2 一段代码在 Excel 里跑起来中间发生了什么很多新手跑代码时报错根源不是语法写错而是没搞清楚「我在操作谁」。Excel 的对象是一层套一层的像抽屉里套抽屉你打开哪个抽屉才能动哪个抽屉里的东西。把这张表记住后面九成的报错你都能自己定位。层级你平时点的东西代码里通常怎么写常见动作Application整个 Excel 程序Application关屏幕刷新、改窗口标题、设状态栏Workbook一个 .xlsm 文件ThisWorkbook、Workbooks(名字.xlsm)打开、保存、关闭、判断是否已打开Worksheet底下那排标签页Worksheets(明细)、ActiveSheet添加、删除、隐藏、保护、遍历Range一个个格子Range(A1)、Cells(1, 1)读写、查找、设格式、加批注代码写好之后放在哪里放在「模块」里模块跟着工作簿一起保存。这也是为什么后面会反复强调文件格式普通表格文件存不下这些代码只有启用宏的格式才装得下这件事我们放到避坑那一章细说。2.3 为什么零基础也值得花这个时间先算一笔账。一份每月要花三小时手工整理的报表一年是三十六小时把它交给代码第一次写可能要两小时之后每月省下三小时第二个月就开始回本。更值钱的其实不是时间是错漏——手工复制粘贴最容易出的事故是漏行、错列、覆盖了不该覆盖的单元格而代码每次跑的逻辑是一样的。第二层收益是跨表汇总。当你手上有十二个月的明细表、结构完全一致手工合并是体力活而一段遍历工作表的循环三十秒就能干完。这份资源里「遍历工作表」「删除空行」「删除重复行」「复制自动筛选后的数据区域」这几组技巧解决的就是这类场景。第三层收益是防错。很多人以为 VBA 只会加速其实它还负责「不让别人改坏」。数据有效性、工作表保护、限制滚动区域、禁用单元格拖放、双击被保护单元格时不弹提示这些设置让表格交给别人填的时候稳得多。你不需要写多复杂的逻辑几行代码就能把一张表从「随便填」变成「只能按规矩填」。2.4 上手前的两分钟准备把写代码的入口调出来不同版本的 Excel 菜单略有差别但路径基本一致打开「文件」→「选项」→「自定义功能区」在右侧主选项卡列表里勾上「开发工具」确定。这时功能区顶部会多出一个「开发工具」标签里面最左侧的「Visual Basic」就是代码编辑器入口快捷键是 AltF11。进去之后你会看到三个区域左上角是工程资源管理器列出当前打开的所有工作簿和它们的模块中间偏右是代码窗口写代码的地方下方是立即窗口用来临时试探一句代码的效果。第一次进去看到一片空白很正常先在左侧右键点你的工作簿选「插入」→「模块」中间就会出现一块可以写字的白色区域。那在这之前要不要先学语法我的建议是不要。入门的话建议先跑通一个最小例子尝到「我改了一个数字表格真的变了」的甜头再回头补概念效率高得多。下一章直接从能跑的代码开始。3. 第一个能跑的例子七行代码把 A 列搬到 B 列3.1 动手前的三件准备第一件事把文件另存为启用宏的格式。点「文件」→「另存为」保存类型里选带「启用宏的工作簿」的那一项扩展名是 .xlsm。这一步省不得普通格式存完你写的代码会全部消失这个坑后面还会专门讲一次。第二件事按上一章的方法把「开发工具」调出来AltF11 进入编辑器在左侧工程里右键插入一个模块。第三件事准备数据。新建一个工作表在 A 列从上往下随便填十行内容数字文字都行第二行开始填就好第一行留作表头。不用太讲究这个例子的目的是让你看到代码真的动了表格。三件事做完回到编辑器把下面这段代码粘贴进去。Sub 第一段代码() Dim i As Long Dim 末行 As Long 从 A 列最下面一行往上找第一个有内容的行号 末行 Cells(Rows.Count, 1).End(xlUp).Row For i 1 To 末行 把 A 列第 i 行的内容写到 B 列第 i 行 Cells(i, 2).Value Cells(i, 1).Value 顺便把刚写进去的格加粗 Cells(i, 2).Font.Bold True Next i MsgBox 处理完了一共 末行 行 End Sub粘贴完按 F5 运行。如果一切正常B 列会出现和 A 列一样的内容并且是粗体最后弹出一个提示框告诉你处理了多少行。如果中途报错先别慌把光标停在黄色的出错行上对照下一节的解释找问题多半是工作表里没数据或者当前激活的不是你以为的那张表。3.2 逐行拆解这七行里藏着的四个基本概念Sub 第一段代码()和最后的End Sub是一对括号中间包住的就是一次可执行的动作集合起个名字是为了以后能在「宏」列表里找到它。名字用中文没问题但别加空格和标点。Dim i As Long是声明变量告诉 Excel 待会儿有个叫 i 的整数要用Long 是整数类型比默认的 Variant 快也省内存写循环时养成习惯就好。Cells(Rows.Count, 1).End(xlUp).Row这一句是整段代码里最值钱的一行也是这份资源里反复出现的手法。Cells(行, 列)用坐标定位单元格Rows.Count表示当前工作表的总行数Cells(Rows.Count, 1)就是 A 列最后一行那个格子。End(xlUp)相当于你手动按 Ctrl↑从最底下往上跳到第一个有内容的格子再取它的.Row拿到行号。为什么要绕这一圈因为数据行数每个月都在变写死一个固定行号下个月就少处理一截。For i 1 To 末行到Next i是循环i 从 1 数到末行中间两行代码就执行多少遍。Cells(i, 2).Value里的 2 表示 B 列.Value是格子里实际装的内容赋值号左边接收、右边提供。最后的MsgBox是弹窗调试阶段特别有用因为它能告诉你「循环到底跑了多少圈」比盯着屏幕数行靠谱。3.3 加一个条件让代码只搬该搬的行只会全盘复制用处有限。真正的价值在于「按条件挑」。把上面那段改成下面这样它只处理 A 列里是数字且不为空的行并把数字统一上浮 10%。Sub 带条件的搬运() Dim i As Long, 末行 As Long 末行 Cells(Rows.Count, 1).End(xlUp).Row 从第 2 行开始跳过表头 For i 2 To 末行 同时满足两个条件不是空值而且是数字 If Cells(i, 1).Value And IsNumeric(Cells(i, 1).Value) Then Cells(i, 2).Value Cells(i, 1).Value * 1.1 End If Next i End SubIf ... Then ... End If是条件判断只有括号里那个条件成立中间那行才会执行。是不等于And表示两个条件都得满足IsNumeric判断内容是不是数字——不加这个判断遇到文字单元格做乘法会直接报类型不匹配。i 2起始是为了跳过表头这一改循环的范围就只在数据行里。跑完之后你会发现 B 列出现了小数。想保留两位在赋值那句后面补一句Cells(i, 2).NumberFormat 0.00就行格式相关的设置在资源的第 11 组技巧里有一整块字体、边框、行高列宽都在那儿。3.4 换成整块操作Resize 和 Offset 怎么用逐格循环写起来直观但数据上万行的时候会明显变慢。这时候换成整块操作速度差一个量级。Sub 整块搬运() Dim 末行 As Long 末行 Cells(Rows.Count, 1).End(xlUp).Row 从 A1 开始向下扩展 末行 行、向右 1 列得到 A1:A末行 这块区域 Range(A1).Resize(末行, 1).Copy Destination:Range(B1) Application.CutCopyMode False End SubResize(行数, 列数)的作用是以某个格子为起点重新划定一块矩形区域的大小两个参数分别是高度和宽度。Copy Destination:表示复制到指定位置最后那句Application.CutCopyMode False是清掉复制状态不然表格上会一直留着那圈虚线用户以为程序没跑完。和 Resize 经常一起出现的是Offset(行偏移, 列偏移)它以某个格子为原点平移比如Range(A1).Offset(1, 0)拿到的是 A2。这两个属性能拼出绝大多数区域定位的写法比手写Range(A1:C100)灵活得多因为区域大小可以随数据变化。如果只是想把数值搬过去、不要格式别用 Copy直接赋值更快Range(B1).Resize(末行, 1).Value Range(A1).Resize(末行, 1).Value。这一行相当于资源里说的「仅复制数值到另一区域」的直接赋值法比选择性粘贴干净。3.5 跑通之后怎么确认自己真的懂了判断自己有没有入门不看能不能背出语法看能不能改。给你三个小改动能做到就说明这章过关了把结果写到 C 列而不是 B 列在循环里加一句判断A 列内容超过某个数值时把字体设成红色把弹窗里的总行数改成「有效行数」。三个改动都只需要动一两个数字或加一行 If但你要自己想清楚动哪个。第一次跑代码报错是常态我见过太多人卡在第一个例子上就放弃了。其实报错的英文提示大多能猜出来比如「下标越界」基本是工作表名写错或不存在「要求对象」多半是引用了一个没被选中的东西。把报错的那一行整句选中按 F8 单步执行看着表格一格一格变化比读十页教程都管用。4. 按三层对象摸清地图Range、Worksheet、Workbook 的入门顺序4.1 为什么按对象学比按语法学快语法书一般从变量、判断、循环讲起学完一章做一道练习题跟你的表格毫无关系两周就忘光。而这份资源的组织方式是按对象分类第 1 章全在讲单元格第 2 章全在讲工作表第 3 章全在讲工作簿。这种排法对新手友好因为它跟你的直觉一致——你平时干活就是先看格子再看标签页再看文件。我建议的顺序是从小往大先把 Range 层练熟因为九成需求都在这里Worksheet 层的用处是批量处理多张结构相同的表Workbook 层的典型场景是「从一堆文件里汇总数据」。倒过来学也不是不行但一开始就碰文件打开保存容易在路径和权限上卡住挫败感强。下面三节各挑几个最常用、最容易上手的动作配上能直接跑的最小代码。这些片段在资源里都有对应的技巧编号跑通之后再去翻原文的完整版会顺得多。4.2 Range 层引用、定位、查找、写入四个动作引用单元格至少有四条路Range(A1)写地址Cells(1, 1)写坐标Range(A1:C3)写区域还有[A1]这种快捷写法。日常写循环优先用 Cells因为行列可以是变量写一次性操作优先用 Range因为直观。资源里第 1 组技巧把这几种方式连同 Offset、Resize、Union、UsedRange、CurrentRegion 一并列了Union 用来把几块不相邻的区域合并操作UsedRange 返回真正用到的最大范围CurrentRegion 返回被空行空列包围的那一整块连续区域——后者在做汇总时特别好用因为它能自动识别数据块边界。定位的常见需求是「找到某一列的最后一个非空行」第 3 组技巧专门讲这个End(xlUp)是主力写法。查找则是 Find 方法的地盘写法如下。Sub 查找并标记() Dim 结果 As Range 在 A 列里找内容为 目标 的格子只找值、整格匹配 Set 结果 Range(A:A).Find(What:目标, LookIn:xlValues, LookAt:xlWhole) If Not 结果 Is Nothing Then 结果.Interior.Color RGB(255, 255, 0) 找到就涂黄 结果.Select 并跳过去 Else MsgBox 没找到 End If End SubFind返回的是一个单元格对象找不到时返回 Nothing所以必须先判断再使用不判断直接.Select就会报「对象变量或 With 块变量未设置」。参数LookIn:xlValues表示只看值不看公式LookAt:xlWhole是整格匹配想模糊匹配就改成xlPart。要做「找到第一个之后继续找下一个」用循环套FindNext资源里第 5 组技巧给了完整写法。写入这一块最容易被忽略的是公式和批注。往格子里写公式用Range(C1).Formula A1B1注意等号和引号写完想检查有没有公式用HasFormula属性想判断公式有没有算错用IsError。批注则是AddComment加之前先用Comment Is Nothing判断原本有没有不判断就加会直接报错。这些都属于「不知道就查得到、不知道就写不出」的细节翻资源目录比背下来靠谱。4.3 Worksheet 层遍历、增删、隐藏、保护工作表层最实用的一个套路是遍历所有表做同一件事比如统一给每张表加表头、统一清空某个区域。Sub 遍历所有工作表() Dim ws As Worksheet For Each ws In ThisWorkbook.Worksheets 跳过名字为「汇总」的表避免把汇总表也处理了 If ws.Name 汇总 Then ws.Range(A1).Value 月份 ws.Range(A1).Font.Bold True End If Next ws End SubFor Each ... In是专门用来遍历集合的循环比按索引号Worksheets(i)安全因为中途删表不会导致编号错乱。ThisWorkbook指的是代码所在的那个文件比ActiveWorkbook稳用户切到别的窗口也不会跑错地方。增删表要注意两件事新增时用Worksheets.Add还能指定放在哪张表前后删除时一定要先关掉确认弹窗否则每删一张弹一次还要手动点。Sub 安全删除表() Dim ws As Worksheet 先确认表存在不存在时直接删除会报错 On Error Resume Next Set ws Worksheets(临时数据) On Error GoTo 0 If Not ws Is Nothing Then Application.DisplayAlerts False 关掉「是否删除」的确认框 ws.Delete Application.DisplayAlerts True 干完活记得开回来 End If End SubApplication.DisplayAlerts是一个开关关掉之后 Excel 不再弹各种确认框删除、覆盖保存都会直接执行。它是把双刃剑用完必须开回来否则后续操作出错你连提示都看不到。资源里第 25 组技巧讲添加与删除第 26 组讲怎么禁止删除指定工作表第 28 组讲深度隐藏——普通隐藏右键就能取消深度隐藏得写代码才能恢复适合放一些不想被误改的参数表。保护相关的设置也在这层。ws.Protect加密码锁定整张表ws.Visible xlSheetVeryHidden藏起来限制滚动区域则改ScrollArea属性。这几样加在一起一张交给别人填的表就不容易被改坏。4.4 Workbook 层打开、判断、保存工作簿层的第一个高频需求是判断某个文件是不是已经打开了。直接去 Open 一个已经打开的文件不会报错但会拿到已经打开的那个实例而如果只是要读它的数据用 GetObject 更省事。Sub 判断工作簿是否已打开() Dim wb As Workbook Dim 已打开 As Boolean For Each wb In Workbooks 只比文件名忽略大小写 If StrComp(wb.Name, 数据源.xlsx, vbTextCompare) 0 Then 已打开 True Exit For End If Next wb If 已打开 Then MsgBox 文件已经开着了 Else 没打开就按完整路径打开 Set wb Workbooks.Open(ThisWorkbook.Path \数据源.xlsx) End If End SubWorkbooks是一个集合装着当前所有打开的文件遍历它比用错误处理去试探更直观。StrComp带vbTextCompare是忽略大小写比较Windows 上文件名本来就不区分大小写这样写更稳。ThisWorkbook.Path拿到当前文件所在目录用它拼路径文件挪了位置也不会断。保存这块有个新手常问的问题怎么关掉「是否保存」的弹窗直接保存答案是先设ThisWorkbook.Saved True再 Close或者用Close SaveChanges:False明确表示不保存。反过来想直接另存为一个新文件名用SaveAs指定路径和格式。资源里第 45 到 48 组技巧把保存、另存副本、把某张工作表单独存成新文件都写全了做报表分发时很省事。还有一个挺有意思的技巧不打开工作簿也能取到里面的数据。资源里给了几种做法从公式引用、GetObject到 SQL 连接。新手先掌握 GetObject 就够了它能在后台读一个文件里的某个区域不用把文件显示出来。Sub 后台读取数据() Dim wb As Workbook Dim 值 As Variant 打开但不显示窗口 Set wb GetObject(ThisWorkbook.Path \数据源.xlsx) 值 wb.Worksheets(明细).Range(B2).Value wb.Close False 读完就关不保存 MsgBox 取到的值是 值 End SubGetObject的第一个参数是文件完整路径返回的是一个工作簿对象之后就能像操作已打开的文件一样读它的单元格。Close False里的 False 表示不保存读完不留痕迹。这条路适合做跨文件汇总注意文件路径要写全只写文件名它会找不到。4.5 把这份代码大全当字典用我的翻法这份资源有七十多个技巧按顺序读一遍会累死也没必要。我的用法是三步先在目录里按关键词找比如「删除空行」「合并单元格」「导出图片」找到后跳到对应技巧只抄那段能跑的最小代码抄完立刻在自己的表上跑一遍跑通了再回看它上面的解释那时候解释才看得进去。入门阶段最值得先啃的是第 1 到第 6 组单元格引用与查找、第 21 到 23 组工作表引用与遍历、第 40 到 42 组工作簿引用与打开。这十几组覆盖了日常八成需求剩下的图形、图表、对话框那几章等你确实要往表里插图片或做交互界面时再看不着急。5. 新手最容易翻车的五个地方报错、闪屏、代码消失5.1 代码跑不通的四个坑坑一没写工作表名代码跑在了别的表上。现象是数据被写到了莫名其妙的位置或者弹出一句「下标越界」。原因是你用了Cells(1,1)这种不带主语的写法它默认作用于当前激活的那张表而你在运行前手滑点到了别的标签页。解决办法是养成写全称的习惯Worksheets(明细).Cells(1,1)或者全程用With Worksheets(明细)包起来块内的 Cells 就都指这张表。坑二大量使用 Select 和 Activate屏幕乱闪还慢。现象是代码运行时屏幕疯狂跳动原本几秒的事拖成半分钟偶尔还报「要求对象」。原因是先选中再操作这种写法把「对象」和「选中状态」绑在了一起中间任何一步被打断就全乱。解决办法是直接操作对象别选中把Range(A1).Select换成Range(A1).Value 1需要复制的用Copy Destination:指定目标全程不碰选区。资源里第 2 组技巧讲选定单元格那是给需要和用户交互的场景准备的不是让你每句都加 Select。坑三循环里直接改单元格数据一多就卡。现象是几百行还行上万行时 Excel 直接假死风扇狂转。原因是每写一个格子Excel 都要重算一次格式和公式顺带刷新一次屏幕。解决办法是开头关掉刷新和重算结尾再开回来。Sub 提速三件套() Application.ScreenUpdating False 不刷新屏幕 Application.Calculation xlCalculationManual 不自动重算 On Error GoTo 收尾 中途出错也要恢复设置 Dim i As Long For i 1 To 20000 Cells(i, 2).Value Cells(i, 1).Value Next i 收尾: Application.ScreenUpdating True Application.Calculation xlCalculationAutomatic End Sub这段代码里有个容易被忽略的细节On Error GoTo 收尾。如果没有它中途一旦报错程序就停在半路屏幕刷新和自动重算都还关着用户会觉得 Excel 坏了。加了这句出错也会跳到收尾段把开关恢复。再往上一个层次是把数据先读进数组、算完再一次性写回那个写法等熟练了再学。坑四用 End(xlUp) 找末行中途遇到空行就断。现象是明明有五百行代码只处理了一百多行。原因是End(xlUp)学的是 Ctrl↑碰到第一个空行就停它找的是「连续区域的末尾」不是「整列的最后一个非空」。解决办法看数据形态如果空行只是零星几处可以用Cells(Rows.Count, 1).End(xlUp).Row配合UsedRange比较取大值如果空行很多是常态就改成从下往上扫一遍或者干脆用SpecialCells(xlCellTypeLastCell)。这一条属于血泪经验不知道的话能排查半天。5.2 环境和习惯上的两个坑坑五存成普通格式代码全没了。现象是第二天打开文件一切正常但宏列表里空空如也功能全消失。原因是存成了 .xlsx 而不是 .xlsm前者不支持任何代码。解决办法只有一个从现在开始凡是带代码的文件一律另存为启用宏的工作簿。另外从别处发来的带代码文件Windows 会默认给它加个「来自网络」的锁打开时顶部出现「宏已被禁用」的黄条这时候要点「启用内容」否则代码在但跑不起来。坑六改了表名代码报「下标越界」。现象是昨天还能跑今天一动就报错。原因是你手动把工作表标签从「明细」改成了「1月明细」而代码里还写着旧名字。解决办法是尽量用代码名引用或者把表名集中写在一处常量里改的时候只改一个地方。资源里第 29 组技巧讲怎么防止别人改工作表名第 21 组讲四种引用方式各自的适用场景翻一翻能省下不少这类返工。6. 接下来的学习路线从抄代码走到改代码6.1 三个阶段别跳级入门之后最容易犯的错是贪多看什么都想学结果一个月后还在原地。把学习分成三段每段给自己定一个能验收的小目标往前走会踏实很多。阶段你要做到的事大概花多久对应的资源内容抄原样复制别人的片段跑通知道它改了哪一格一到两周第 1 到 6 组单元格引用、查找、复制改把片段里的列号、条件、表名换成自己的跑出不一样的结果两周到一个月第 7 到 20 组格式、有效性、公式、批注、合并拼把两三个片段串起来解决一个完整的小任务一个月以后第 21 到 42 组工作表与工作簿的批量处理「拼」这一步的典型练习是自己写一个「一键整理月报」的小宏打开指定的数据文件复制明细到汇总表删掉空行和重复行按某列排序加边框另存一份带日期的副本。这个任务会同时用到工作簿、工作表、单元格三层写完你对整个对象模型的感觉就出来了比看十篇教程都实在。6.2 一个具体的小技巧先写注释再写代码给一个我一直在用的习惯。动手前先在模块里把步骤用中文一行行敲成注释比如「打开数据源」「复制到汇总表」「删空行」「保存副本」然后再往每条注释下面填代码。这样写出来的东西结构清楚卡住的时候也知道自己卡在第几步而不是对着一屏代码发呆。调试阶段多用两样东西F8 单步执行看每一行执行后表格的变化MsgBox或Debug.Print打印中间变量的值确认循环圈数和判断结果符合预期。这两样土办法比任何调试工具都直给尤其是刚开始你能亲眼看到代码是怎么一格一格动表格的。还有一个建议每次跑通一段代码立刻把它的作用、适用范围和改哪个参数记在一个小本子上三五行就行。三个月后你会攒下几十条那才是真正属于你的东西比任何一份大全都好用——因为它全是按你的活儿写的。我第一次带一个完全没写过代码的同事做这份练习他照着抄能跑改参数就懵后来才发现问题出在他从没单步执行过代码在他眼里一直是个黑匣子。从那以后我每次教新人都强制走一遍 F8 单步看着表格一格一格变第二天他自己就能改条件了。希望帮到你。本文还有配套的精品资源点击获取