HI,大家好,我是星光,今天咱们来继续学习VBA。在上一章咱们讲了为什么要学习VBA~VBA还值不值得学~学了还有没有用~零基础学VBA编程01:VBA还能不能学?学了还有没有用?

这一章咱们再来简单回答几个小问题:什么是VBA?如何编写和运行VBA代码?

什么是VBA先来看第一个问题,什么是VBA?你学了一段时间VBA,有一天有个异性朋友问……“小胖,你最近在学什么呀?”“VBA!”“VBA是什么呀?”“VBA就是……反正很厉害,它可以减少很多重复性的工作,可以很轻松就让Excel简易化自动化智能化,你听我说,它还可以做人机交互界面,完成Excel自身功能无法完成的高度复杂的任务,还能够一键生成Word和PPT,你说厉害不厉害?”
“听不太懂哎——它和VAR是什么关系?没关系?那和BRA呢?也没关系?那V是什么?B是什么?A又是什么?”“……”你很茫然,于是想起了那个叫百度的混蛋,默默搜索了一番。什么是VBA?VBA是Visual Basic For Application的简称,是VB语言的一个分支,是一种建立在Office应用程序中的开发工具,是……——然而知道这概念也啥实际用处,因为你的异性朋友依然听不懂你在说什么。“还是听不太懂哎,对了,VBA是不是宏?”“宏?”“就是病毒!”“病毒?不不不,有的不是病毒,有的……”“那就是病毒咯!”你无语,只好继续百度。什么是宏?宏来源于英文单词“marco”,是一种批量处理的称谓,暗示着将小命令或动作转化为一系列指令,是软件提供的一种特殊功能,也就是说宏并非Office软件所独有,因此从广义上来说,VBA确实是一种宏,但宏却未必是VBA……宏是不是病毒?这就好比问人是不是好人?人当然有好人也有坏人,好人也可能做坏事,坏人也可能做好事,人是不是好人,得看在某个时间里TA做了什么事,这就不是薛定谔的猫……“VBA是一种非常简单实用的编程语言,它可以做坏事,也可以做好事……”你尝试着解释。“编程?那小胖你就是程序猿咯?”她看了看你的发际线,“嗯,看起来确实有一点儿像。”“不……不是……你误会了!程序猿是一个职业的称呼,并不是会一点编程就是程序猿,还需要穿格子衫,还……”“听不懂哎。”她看着你的发际线。“……”……且不管你的发际线到底怎么样,咱们还是大体了解了VBA是什么,那么——如何编写VBA呢?谈到编写VBA,就不得不说一下VBE……什么是VBE大部分编程语言都有自己的集成开发环境IDE(Integrated Development Environment),它为用户提供了代码编写功能、分析功能、调试功能等,比如语法高亮、语句自动补全、参考资料……VBA也不例外,VBA的代码编辑器依托于Office软件,又被称为VBE(Visual Basic Editor)窗口——换句话说,VBE窗口也就是咱们以后编写VBA程序的地方。长相有点儿寒酸,如下图所示。进入VBE窗口常用方式有以下几种。第1种方式是快捷键。第2种方式是右键单击任意工作表标签,在弹出的快捷菜单中选中【查看代码】命令。第3种方式是在【开发工具】选项卡中进行操作。……我们知道Excel有功能区,功能区内有选项卡,每个选项卡对应不同的功能分类。比如【开始】选项卡集中了用户最常使用的功能;【插入】选项卡集中了透视表、图形和图表等功能;【页面布局】是打印;【公式】是函数公式……【开发工具】选项卡则属于VBA的地盘。不过在默认状态下,Excel功能区并不显示【开发工具】选项卡。这是由于VBA属于Excel的高级功能,既然是高级功能自然要享受一番特殊的待遇——不要说什么人人平等这样骗人的鬼话,毕竟Excel它不是人——这待遇就是关起来不能主动见人。在【文件】选项卡中单击【选项】命令,打开【Excel选项】对话框。在该对话框中,单击【自定义功能区】选项卡,在右侧列表框中选中【开发工具】复选框,单击【确定】按钮关闭【Excel选项】对话框,即可在功能区中显示【开发工具】选项卡。在【开发工具】选项卡中单击【Visual Basic】或者【查看代码】按钮即可进入VBE。……打个响指,一起来详细认识下VBE吧,毕竟以后咱们就靠它编写VBA代码了,无论如何总得混个面熟先。认识VBEVBE有菜单栏、工具栏和功能窗口三部分组成。
菜单栏的选项卡比较多,现在说了你也记不住,就等用到时咱们再说。这里先重点说下功能窗口。
功能窗口又分为【工程资源管理器窗口】、【属性窗口】、【代码窗口】、【立即窗口】、【本地窗口】等五大窗口。不同的窗口功能和作用如下。1、工程资源管理器窗口工程资源管理器窗口,顾名思义,也就是管理工程资源的地方;这里的工程指的是工作簿中模块的集合。它呈现树形结构,包含4类对象:Excel对象(工作表和工作簿)、模块对象、窗体对象和类模块对象。
一个新建工作簿的工程资源管理器窗口默认只有工作表对象和ThisWorkbook对象;但我们需要重点了解的是模块对象,绝大多数的VBA过程都是在模块对象中编辑和保存的。依次单击【菜单】→【插入】→【模块】,即可生成一个模块和模块对应的【代码窗口】。在【代码窗口】中我们可以新建或编辑VBA过程。2、属性窗口属性窗口用来查看和设置对象的属性,比如设置窗体颜色、大小、设置工作表对象的显示状态为深度隐藏等。3、代码窗口代码窗口用来显示和编辑VBA代码。【工程资源管理器】中每个对象都拥有自己的代码窗口,双击某个对象,即可在VBE中打开该对象的代码窗口。代码窗口分为上下两个部分,上部为对象列表框和过程/事件列表框,下部为代码编辑区。4、立即窗口立即窗口常用于代码调试,在该窗口输入代码,按回车键即可看到代码执行后的结果。除了在立即窗口中直接输入代码外,也可以在VBA代码中使用Debug.Print命令将指定内容输入到立即窗口中,这在代码调试过程中较为常用。不过需要注意的是,立即窗口和代码窗口不同。当Excel程序关闭后,系统会自动清除立即窗口中的内容。5、本地窗口本地窗口将自动显示出当前过程中所有的变量声明和变量值,而且会随着代码运行的过程自动更新显示,这是我们调试代码最主要的依据。……小贴士:在Excel中,以上窗口并非全部默认显示。单击VBE菜单栏上的【视图】选项卡,会打开一个选项菜单,熊迪们可以根据需要选择显示相应的功能窗口,通常建议至少选择显示【工程资源管理器窗口】、【代码窗口】和【本地窗口】。了解完了VBE代码编辑窗口,下一个问题是,如何编写VBA代码?如何编写VBA代码看我手——歪,图,思锐……编写VBA代码的方式常用的有三种。第一种方式:复制粘贴别笑,严肃点,俺是认真的。要知道搜罗优秀代码、复制粘贴化为己用是编写程序的基本能力,是程序员不可或缺的左膀右臂,不管你是新手还是高手,天下代码早晚都不过一个抄字——不过咱们得知道哪些能抄?哪些不能抄?哪些抄了之后必须要修改。第2种方式:自己写自己写的意思就是打开VBE,在模块等对象的代码窗口内自己编写VBA代码(这是一句废话)。复制粘贴固然属于天下无双的神技,但并不适合细节迥异的具体问题处理,所以至少你得知道代码的逻辑是否正确;结构是否合理;局部的代码应该如何修改——而有些时候,修改别人的代码,还不如自己重新编写来的爽快。第3种方式:录制宏录制宏的意思是让勤快又善良的Excel帮咱们自动写代码。对于VBA初学者来说,最烦恼的事情莫过于Excel的对象太多了,每个对象的属性和方法又太多了,层层叠叠,头大的让人记不住——其实完全没必要记住,想要知道某个对象的属性和方法?根据需求录制一段宏,查看下Excel自动生成的代码就一目了然了。比如说,你想要知道如何使用VBA代码设置单元格边框线以及标题行文字加粗并居中显示,可以使用以下操作。步骤1:在【开发工具】选项卡下单击【录制宏】命令,打开【录制宏】对话框。根据需要在【录制宏】对话框的【宏名】文本框中输入宏的名称,当然也可以保持默认值不变,然后单击【确定】按钮步骤2:设置A1:D10单元格区域的边框线为所有边框线,将A1:D1标题行的字体加粗并居中显示。最后在【开发工具】选项卡下单击【停止录制】命令,结束录制宏。步骤3:按快捷键打开VBE窗口,在模块中即可看到Excel自动生成的VBA代码。以上代码看似繁杂混乱,但如果您已有一定的VBA编程基础,还是不难从中分辨出哪些代码是设置边框线,哪些代码是设置字体加粗和居中显示的;而我们只需要复制相关代码,稍加修改即可直接使用。当然,录制宏的作用不止如此。有一些朋友,出于各种原因无意深入学习VBA,却又希望借助VBA提升工作效率,甚至实现数据处理自动化——当然也是可以的,这就是民间流传的录制宏+函数公式的组合。借助录制宏,我们可以使函数公式自动输入,进而实现数据处理的自动化。我举一个简单的小栗子。如下图所示,有两张表,一张表是数据源,一张表是查询表。咱们需要制作一个数据查询的模版;在查询表的B列,计算A列人员对应的考试成绩——你会怎么处理呢?步骤1:在【开发工具】选项卡下单击【录制宏】,打开【录制宏】对话框,在【宏名】文本框中输入内容:我的查询,并【确定】。步骤2:在B2单元格输入以下函数公式:
=IFERROR(VLOOKUP(A2,成绩表!A:B,2,0),"")
向下复制填充到B2:B5000单元格区域;然后复制B2:B5000单元格区域,使用选择性粘贴为数值的方式,将公式计算结果粘贴为数值,最后停止录制宏。如此一来,Excel就自个生成了一段代码,这段代码的作用是自动使用VLOOKUP函数查询A2:A5000单元格范围内的人名在成绩表中的考试成绩。于是新的问题来了——如何运行这段VBA代码?如何运行VBA代码以运行上述名为“我的查询”的录制宏为例,说下四种常见的优势各异的运行VBA代码的方式。第1种方式:快捷键在【开发工具】选项卡下,单击【宏】按钮,打开【宏】对话框。在该对话框中选中宏名“我的查询”。
在右侧单击【选项】按钮,打开【宏选项】对话框;设置快捷键为Ctrl+q,最后单击【确定】按钮,依次关闭对话框。设置完成后,只需按下快捷键,系统就会自动运行相应宏。想象一下吧小同志,你背靠皮椅,小眼微眯,手指轻动,一个函数都不漏痕迹,只是按下快捷键,Excel就会自动为你获取数据查询结果,是不是骚秀气满满抑或霸巴适气侧漏?不过需要注意的是,这里设置的宏快捷键会覆盖Excel默认的快捷键。比如将宏的快捷键设置为,也就不再执行原来的打开【查找与替换】对话框功能了。第2种方式:插入按钮快捷键的方式虽好,久而不用却难免会忘,此外它也不适合广泛用于制作通用模版。此时我们可以设置一个按钮,通过它来执行指定的宏。在【开发工具】选项卡下依次单击【插入】→【按钮(窗体控件)】按钮。在工作表中绘制一个大小随心的按钮,松开鼠标左键后,系统会自动弹出一个【指定宏】对话框,选中所需宏名,比如本例“我的查询”,单击【确定】按钮,即可将该按钮关联给宏“我的查询”。设置完成后,单击该按钮,即可执行相应的宏代码。小贴士<1>:右键单击按钮,在弹出的快捷菜单中单击【编辑文字】,可以修改按钮的名称,比如修改为“朕要工作了!”<2>:除了插入按钮外,也可以插入图形或图片等对象,实现类似关联运行宏代码的效果。第3种方式:功能区宏按钮如果一个工作簿的宏命令比较多,以至于你一时间找不到相关按钮的位置,就可以使用这种方式来运行宏了。在【开发工具】选项卡下单击【宏】按钮,在弹出的【宏】对话框中选择【我的查询】选项,单击【执行】按钮即可运行该宏。第4种方式:在VBE中运行宏在代码开发过程中,经常需要多次运行和调式VBA代码,此时就需要在VBE中直接运行宏。单击“我的查询”过程代码的任意位置进入编辑状态,然后单击工具栏上的【运行子过程/用户窗体】按钮,或者按快捷键,即可运行该过程代码。……上面咱们聊了运行宏的4种方式,但是有个姓慕容的姑娘说过,爱情不是你想来,想来它就来,宏也不是你想运行……它就一定能运行。有时候你打开一个工作簿,单击按钮,会弹出如下提示框。出现该提示框的原因通常有两种,一种是该按钮没有指定宏(或者曾经指定过宏,但相关宏被删除/更名了),另一种是该工作簿所有的宏确实被禁用了——这就要聊到宏的安全性问题。设置宏的安全性咱们在前面什么是VBA里讲过,在很多人眼中宏是病毒的代名词,这是由于宏在给Office用户带来极大便利的同时,也带来了潜在的风险。它可以轻而易举的控制或运行电脑中的应用程序,生成计算机病毒或恶意功能。Excel通常默认不允许运行工作簿中的宏,并提供了【宏安全性设置】功能。在【开发工具】选项卡下单击【宏安全性】按钮,可以打开【信任中心】对话框。在宏设置下,可以看到如下图所示的四个选项。一般来说,推荐使用【禁用所有宏,并发出通知】选项。启用该选项后,打开保存在非受信任位置的包含宏的工作簿时,在Excel功能区下方会显示【安全警告】消息栏,告知用户工作簿中的宏已经被禁用,是否【启用内容】。当用户在消息栏中选择【启用内容】后,该文件会自动成为受信任的文档,再次打开该文件,系统不再显示【安全警告】消息栏。当用户没有选择【启用内容】,而是直接进行了其它Excel窗口的操作,【安全警告】的消息框会自动消失,并默认用户不选择启用宏。此时如果你又想启用宏了——不好意思,爱情不是你想来想来他就来,麻烦你关闭重启Excel工作簿再和【安全警告】的消息框打个招呼吧~如何保存带宏的文件最后一个问题:当我们编写了一段宏代码,运行测试成功后,就需要将文件保存——那么如何保存包含宏代码的Excel文件?这问题问的似乎有点儿傻气,但以我常年扎根底层的沧桑而忧郁的双眸来看,还是很有必要说一下地——……在Excel基础入门教程的篇章里咱们曾经讲过,Excel的文件格式类型有很多种,最常用的是xlsx,但这种格式的文件并不支持保存宏代码,它会自动抹除VBE或其它位置的宏。只有古老的03版Excel、二进制工作簿(xlsb)和以字母“m”结尾的文件格式(xlsm,xltm,xlam)才可以用于保存宏代码的文件,其中最常使用的是xlsm格式。——因此,敲黑板,在你学习VBA的过程中,请务必先将工作簿另存为xlsm格式。为什么这么说?我有个叫随风小妞的前女朋友,经常不记得将Excel文件另存为xlsm格式,而是直接使用xlsx格式编写代码。每当代码临近完成调试,却有不小机率不幸死机,于是代码全军覆没尸骨无存。你想想,你想想他当场哭的梨花带雨的模样,岂是一个惨字了得?希望你不要重蹈他的覆辙,更不要哭的梨花带雨我见不怜……致安,愿你不再因Excel而烦恼,我是星光,咱们下期再见。图文制作:看见星光原载公众号:Excel星球

专业的职场技能充电站

keil debug如何在watch直接修改变量值_零基础学VBA:什么是VBA?如何编写和运行VBA代码?...相关推荐

  1. keil debug如何在watch直接修改变量值_python日志记录系列教程,内置logging模块(一),直接使用logging模块的基础日志记录

    前言:成熟的软件开发不可避免的要进行日志记录,python内置模块logging提供了强大的日志记录能力,本文将从多个角度,由浅入深的介绍logging的常见使用方法和一些基本概念,本此系列文章分为两 ...

  2. keil debug如何在watch直接修改变量值_printf系列教程03_SWO打印输出配置,基于Keil『Debug(printf)Viewer』...

    本文原创作者『strongerHuang』 首发于微信公众号『嵌入式专栏』,同时也更新在我的个人网站:EmbeddedDevelop 标签:printf. SWD. SWO. SWV. ITM. JL ...

  3. 中使用js修改变量值_谈一谈css-in-js在React项目中的使用

    一.什么是css-in-js 参考:[css in js 简介] 简单来说,传统的前端方案推崇"关注点分离"原则,HTML.CSS.JavaScript 应该各司其职,进行分离. ...

  4. pythontk界面显示函数中的变量值_简单易学,西门子触摸屏3种修改变量值的方法!博图Wincc V14组态...

    应条友要求,今天分享3种修改触摸屏变量值的最常用方法! 全文约700字,通读4分钟! 看完本章,你将收获以下内容: 一:必会知识点:3种修改变量的方法及适用点 二:实例:3种方法修改触摸屏变量值 三: ...

  5. uniapp 获取到js文件var一个变量怎么获取到这个变量值_浅析Js中const,let,var的区别及作用域...

    理解:let变量的作用域只能在当前函数中 js中const,let,var的区别及作用域_lianzhang861的博客-CSDN博客​blog.csdn.net 全局作用域中,用 const 和 l ...

  6. 环境变量 变量名 变量值_如何使用环境变量

    环境变量 变量名 变量值 Environment variables are a set of dynamic named values that can affect the way running ...

  7. 前端wxml取后台js变量值_这些鲜为人知的前端冷知识,你都GET了吗?

    背景 最近公司项目不多,比较清闲,划水摸鱼混迹于各大技术博客平台,瞬间又GET了好多前端技能,一些属于技巧,一些则是闻所未闻的冷知识,一时间还消化不过来,不由的发出一声感叹! 前端可真是博大精深 于是 ...

  8. 前端wxml取后台js变量值_微信小程序云开发教程WXML入门数据绑定

    同学们大家好,我是小伊同学,今天带领大家学习WXML部分一个重要的知识点,数据绑定. 简单来讲,数据绑定就是通过双重花括号将一个变量绑定到界面上. 首先,我们为什么要将变量绑定到页面上呢?因为在制作一 ...

  9. apk安装到电视上看不到图标_零基础搭建电视直播APP平台第二弹(修改APP)

    大家好 , 我是阿尘,欢迎来到:极梦小屋. 由于公众号改版,建议大家 星标置顶 本公众号,就可以第一时间接收到我们所推荐的精品资源啦! 为了大家更方便的交流和可以不错过每天的分享,所以特意建了一个交流 ...

最新文章

  1. 组合计数 ---- Codeforces 737C Div2 C. Moamen and XOR [多阶段决策计数dp]
  2. 现代化 Web 应用开发实战
  3. 研磨设计模式之 单例模式-3
  4. ORACLE+RAC+ASM环境下添加redo日志组
  5. 请收藏,Linux 运维必备的 40 个命令总结,收好了~
  6. 20170914-构建之法:现代软件工程-阅读笔记
  7. 如何下载Android源码(非常详细,含自动恢复下载,编译,运行模拟器说明)
  8. c++primer 第2章 练习题答案 (尚未完善 陆续补充中 基本上已经完成)
  9. 小牛性能服务器图片,【N1S参数篇】性能与体验并肩,N1S参数配置介绍
  10. PyQt5 小工具:Excel数据分组汇总器...
  11. win10系统怎样安装/更新独立显卡驱动
  12. android系统GUI设计师必会资源图制作工具
  13. 微信公众平台消息储存mysql php_使用PHP进行微信公众平台开发的示例
  14. eclipse配置python解析器_Eclipse中配置Python环境
  15. Maven配置阿里云HTTPS镜像地址
  16. 梯度下降法-优化算法-机器学习
  17. OSChina 周六乱弹 —— 作为程序员我对高数的态度
  18. 为期五天的实训总结--Java Web
  19. 互联网晚报 | 11/22星期二 | 威马汽车上海全员工资打折;中国千万资产家庭达206万户;充电宝质量国家抽查不合格率达25%...
  20. 365天挑战LeetCode1000题——Day 079 力扣周赛专题 米哈游 检查相同字母间的距离 恰好移动 k 步到达某一位置的方法数目 最长优雅子数组

热门文章

  1. 在腾讯云轻量云服务器上搭建mysql数据库
  2. Tesseract-ocr 3.0.2源码 + VS2010项目工程 + 简单测试代码
  3. win32 汇编基础概念整理
  4. IOS开发基础之截图、图片文字水印
  5. java中servletcontext_java中获取ServletContext常见方法
  6. rtmp测试地址_超详细搭建多码率测试环境(成为流媒体高手必经之路)
  7. linux怎么取消raid磁盘阵列,Linux下彻底关闭某个RAID磁盘阵列
  8. linux 内核 报错,根据epc定位linux内核报错.pdf
  9. php 遍历 目录,PHP采用自定义函数实现遍历目录下所有文件的方法
  10. Jar mismatch! Fix your dependencies