百科问答小站 logo
百科问答小站 font logo



什么是「宏」? 为什么以前计算机老师说不要用 word 中的「宏」? 第1页

  

user avatar   s.invalid 网友的相关建议: 
      

宏这种东西,说话的场合不同、上下文不同,指代的东西就不一样。


但对office软件这种场景来说,宏这个概念简单而清晰:它就是一个VBA写的小程序。

——当然,仅限于office软件。玩C/C++的说的宏是另外一回事,你不需要知道。


VBA是一种编程语言,它是Visual Basic for Applications的缩写;其中basic是一种古老的脚本语言,visual basic是微软的basic升级版,这个升级使得它可以很方便的写图形应用。最后,微软把Visual Basic集成到了office应用(applications)里面,这就是VBA。


我们知道,你在屏幕上的任何操作都会唤起一段程序。

比如,复制文件实际上执行的就是copy这个命令对应的动作;一般来说copy可以接受两个参数,第一个参数是待复制文件,第二个参数是复制位置以及新的文件名。

换句话说,copy是一个接口(或者叫函数、方法、过程等等,不同系统叫法各异,但总体来说都是一回事);我们可以调用它,给它指定源文件和目标文件两个参数,这就完成了文件复制动作。


类似的,当你点了word左上角那个软盘的图标时,实际上就调用了word的save方法;save的默认参数就是当前文件名——当然,如果尚未指定文件名、或者点了“另存为”的话,实质上就是不带参数的调用了document.save,于是就会弹出一个对话框,询问你文件名了。

同样的,你在软件里的一切操作,归根结底都是这么个方法调用(或者叫接口调用、函数调用、功能调用,都行)。


那么,很容易想到,如果我们把用户做的每个动作唤起的那个函数以及参数都记录下来,是不是就可以复制他上一次的操作了?

比如,选择一段文字,把行间距调到10、字体大小调成宋体5号字,再调一调缩进风格……如果把对应的函数调用记下来,存成一个宏——那么,下次再选中一段文字,是不是点一下这个宏就可以自动完成以上工作了?


因此,很多软件,从Photoshop到office,都支持了动作录制——这样用户用起来就方便太多了,对吧。


既然已经允许录制动作了,那么何不更进一步呢?


比如,允许用户把自己录制的动作分发给另一个用户……

——老张!把目录风格改成上次的样子怎么弄?在线等,挺急的……

——哎呀你个小白,我给你说不清楚。这样吧,我录个宏,你导入它,执行一下就完了!


是不是方便多了?


还能更方便一些吗?

当然可以。

既然这些动作说白了就是函数调用、既然已经允许用宏记录连续执行的一堆函数调用了——那么,何不引入顺序分支循环这样的程序流程控制语句,把它搞成一门真正的语言呢?


没错。可以这样做。这就是VBA。

我曾经做过这样一个工具:用户产生一堆数据存进excel,然后需要一些很复杂的整理统计工作,最后产生几个图表——数据量不确定,页面数量也不确定,怎么办呢?

可以让用户逐个切换一堆sheet、然后选中所有数据并点宏。这个办法可以解决问题,但是一旦漏点多点统计结果就出错了——当然这比自己整理要方便一些,也更不容易出错;可显然太麻烦太不安全了……

简单。通过程序自动切换每个sheet、然后自动调用宏完成计算——整体只需点一次按钮就够了。

不仅如此,我还可以用宏自动批量导入数据(于是用户不需要自己一个个sheet指定文件慢慢导入了)、用usedrange自动取得数据行列数、然后自动用循环完成统计并生成统计页面、再在上面插入饼图、折线图……


我们的工具一次运行经常会产生几十页的数据;在过去,这些数据需要一个熟手忙活一整天、动不动还会出错;但有了我这个工具,一切就可以在几秒内自动完成——只要把数据放到同一个目录,然后点宏,在弹出框中选择正确目录,程序会自动完成剩下的所有工作。


还能更给力点吗?

可以。

我做的另一个小工具,给做测试的同事用的。他只需填写用例名称、用例步骤等信息,一点按钮,程序就会自动生成用例;再一点,自动执行所有用例;执行结束,用例执行结果、输出的所有信息就会被分门别类的收集起来,在excel中展示——甚至可以折叠细节、只看汇总;也可以随时点开查看每一个细节……

一个功能还算强大的专业工具就诞生了。


甚至于,还有人用它写游戏、写音乐播放器、写一切你想都想不到的东西——只要会编程,这些都挺简单的。


既然宏的功能如此强大,那么自然就会有人滥用它。


其实也很简单——无论原理还是实现,都简单的要命——office里面有个东西叫“模板”,其中的normal.dot模板是默认给所有文档用的,里面的宏可以在你新建文档时自动套用……

为了方便用户,微软做了个约定:如果你把宏叫autorun(或者auto?具体记不清了,大致就这意思),那么它就会在文档打开时第一时间运行。

这样用来干正事自然很方便,比如你的工作就是写格式文档,那么用个宏,自动把标题啥的都帮你填好、设置好格式,你只需打字就好了——多方便啊。


但有些心术不正的人就盘算了:既然如此,那么我也可以在用户新建文档时自动给他插个autorun宏进去啊……然后这个宏会在打开文档后自动执行,再把自己插进normal.dot里面去——那么,如果有人拷贝了这个文件,在自己的计算机上打开……是不是就传染给它了?

继续,更简单的,既然用户打开文档就能触发这个autorun宏,那么我自动判断一下,日期等于13号就把他的文件内容删了并立即存盘、关闭,看他哭不哭!

更狠一点的,遍历他的磁盘,删除一切可以删除的文件……


你看,就这么简单——所以我一直说,写病毒和技术无关,编程入门、心眼足够脏,足够了。


总之,这种损人不利己的宏病毒让微软大伤脑筋、也让office用户谈虎色变。

因此,当时就流行一种“因噎废食解决法”,就是删除normal.dot等几个模板文件、禁用宏,这样宏病毒就流行不起来了。

当然,现在office不再不声不响的运行宏、还会提示你是否启用宏、如果启用会遭受风险,等等——那些哗众取宠的脏心眼垃圾拿这个没办法,宏病毒渐渐就销声匿迹了。


user avatar   mai-cui-ya-96 网友的相关建议: 
      

宏一般是指macro。计算机里的话,macro一般指一种集合,该集合会包含需要重复执行的一系列操作。所以有时候,宏也指该重复操作的脚本。

其实类似的东西,不要太纠结它的名称,搁VB的场合,也可以叫sub(子程序),搁很多场合,又可以叫函数,搁OO的场合得叫方法……

它叫什么不重要,你今天叫云天河,明天也可以叫云阿三。




  

相关话题

  计算机(CS)专业大学生怎样平衡绩点和编程能力? 
  TOP2计算机系,已经开始怀疑自己完全不适合相应领域的学习,未来的路应该如何走? 
  从物理层面解释,为什么在键盘上输入 abc,电脑屏幕上就会显示 abc? 
  为什么图片反复压缩后普遍会变绿,而不是其他颜色? 
  你写代码的起手式是什么样的? 
  进了小公司的应届程序员如何翻身进入大公司? 
  为什么CPU主频一般都比FPGA快,但是却说FPGA可以帮助CPU加速? 
  棋类和数学所涉的智商相同吗? 
  假设中国人最先开发电脑和设计程序语言,那么各种程序语言会使用汉字吗? 
  清北本和 top30 美本,应该怎么选? 

前一个讨论
为何巴西人能做出 Lua 这种出彩的东西?
下一个讨论
高级程序员的技能,对产品而言挺简单的,而初级程序员的技能,对产品反倒是最难的。这种错位意味着什么?





© 2024-11-23 - tinynew.org. All Rights Reserved.
© 2024-11-23 - tinynew.org. 保留所有权利