更新时间:2024-02-26 00:03
加载宏是通过增加自定义命令和专用功能来扩展 Microsoft 系列办公软件功能的补充程序,可扩软件包括常用的Word、Excel、PowerPoint、Outlook等 。可从 Microsoft Office 网站或第三方供应商获得加载宏,也可使用 Visual Basic for Applications 编写自己的自定义加载宏程序。
加载宏是Microsoft Office 办公软件的一项重要功能,属于办公件自身功能之一,不需要另行安装软件。用户制作的宏文件可以像Office制作的普通文档一样进行保存,打开,复制,与他人分享。
加载宏对于专业从事办公软件操作的人员非常重要,熟练掌握加载宏,可以让操作人员从繁重的数据处理工作中解脱出来。加载宏的运用可以极大的提高工作效率和质量。
1.按扩展名分类
加载宏文件可以是软件自带的,像Excel中的查询向导,分析工具库等。与自带加载宏对应的则是自定义加载宏——用户自已利用办公软件或其他工具软件编辑的宏。自定义加载宏泛指一类宏,由制作软件的不同带有不同的扩展名。如Excel的宏文件2003版以前的后缀为.xla,2007版后的后缀为.xlam,Word的宏文件后缀为.docm,PowerPoint的为.ppa等,在电脑中查到的.DLL .COM .EXE有一部分也是加载宏,是用VB,C++等开发的。
2.编辑位置不同的分类
用Office办公软件上的VBA设置的加载宏与普通文件很相似,不同之处就是多了一个加载过程。有宏没加载的文件叫带宏文件,不是加载宏。
加载方式大同小异。除InfoPath外,都有大致相同的步骤:先编制命令加载过程,再添加子程序,设置工程属性,将页保存为宏文件,在软件中调用。完成了以上五步,以后在打开软件时,宏就自动随软件一起启动了。
1.编制命令加载过程
加载可以是往菜单中添加,也可以往工具栏或快捷菜单中添加,添加的可以是已有的菜单也可以是新建的自定义菜单。
添加内容包括命令名称,命令代表的功能宏,命令提示,命令图标,菜单分隔线,命令快捷键。
添加加载过程的程序编辑位置,通用方式是将菜单加载放入能自动运行的子程序Sub auto_open()中,这也是许多病毒的起动方式。对Excel和Word又多了一个选择,可以放在事件中。
Excel可以在ThisWorkbook 的Private Sub Workbook_Open()事件中添加加载。在Private SubWorkbook_BeforeClose(Cancel As Boolean)事件中添加卸载。
Word可以在ThisDocument的Private Sub Document_Open()中添加加载。在Private Sub Document_Close()中添加卸载。
加载过程除单菜命令外,还包括环境判断,条件限制,装载提示,容错处理,联机帮助等。
例子见图1
联机帮助需要用专门的软件先制作chm或hlp文件,在加载过程序中设置关联即可使用。
加载宏有了加载过程就可以与软件自带的菜单不仅使用一样,看上去也一样。初初一看还以为是Office自带的菜单。宏用起来是否方便,加载过程很重要。
例子见图2(2013版EXCEL)
2007版前的Office需要自已设置各种菜单命令,2007版开始可以通过“Excel 自定义.exportedUI”文件来添加命令到工作区。为了兼容各不同的版本,加上版本自动选择语句就行了。
2.添加子程序
子程序有Private Sub和Public Sub两种类型,一般需要给其他程序调用的都设置成Public Sub,Private Sub不能被其他子程序调用,只能被命令支配。
在菜单中命令对应的就是实现各种作用功能的子程序。接下来就是编辑子程序。
最简单的编辑子程序就是打开录制宏,然后在办公软件上操作。录制的宏就是一个子程序。
为了方便使用,子程序除了分模快,还要分菜单。将对Excel本身功能扩展的子程序,集合成通用菜单,放在工具栏或快捷菜单中。通用菜单,是对所有Excel表都可以使用的。
例如:Excel本身没有一个对页进行合并的菜单,而实际工作中经常要对多个表格中的内容合并到一个表格中去。“合并Excel工作表”就是对Excel本身功能的扩展。
将只用于特定工作的子程序,集合成专用菜单,放在菜单栏中。
例如:从ERP中导出一个产品的BOM表,然后根据BOM表做出产品的成本表,做出一份完整的成本表除了物料清单(BOM),还需要材料单价,汇率,人工工时,费用分配,废品回收等其他十多个表格。这功能起个名字叫“产品成本BOM自动生成”。显然,其他人员有这个菜单,没有相关的数据表格,是使用不了的。
专用菜单,最能体现宏的强大,高效。但它只能对放在指定位置的特定的表进行操作,有时只能用在某台电脑上或者只有特定的登录用户才能使用。
区分通用与专用的意义就显示出来了。要用专用宏就要看说明书,或向宏设计人学习用法,了解文件存放路径等。
专用宏除了分模块,分菜单,甚至还要分文件。加载宏,就是一个文件,是要占内存的,若要节省内存并加快 Excel的运行速度,卸载不常用的加载宏就很重要,分文件的意义就在这里。
例如,将仓库和财务使用的宏分成不同的加载宏:仓库.xla ,财务.xla。在操作仓库数据时就加载仓库.xla 。
在编辑子程序时要注意称谓的变化。
例如在Excel中ThisWorkbook,ThisSheet用来指宏文件所在的工作簿和工作表,而不带这些称谓的都指活动簿,活动表。在PowerPoint就只能通过指定名称或序列来区分是加载宏还是幻灯片了。
3.工程设置
工程中要设置的内容具体如下:
(1).加载属性设置包括:设置工作表,工作簿属性,VBAProject的属性。
Office各软件之间会有些不同。例如Excel需要设置带宏的表不可见,否则可见到表,PowerPoint保存成宏就不可见,Word则设置了密码,不仅表不可见连工程都不可见。这些特点是编程人员需要注意的。
(2).设置工程密码,对Excel很方便下次想改程序,双击就会提示密码输入 ,就可以修改。同样的做法Word会显示工程不可见,因此想下次修改程序,就不能设置。如果想保密让Excel工程不可见,可以用二进制编辑器对加载宏文件进行修改,让工程不可见
(3).引用是扩展插件的,如2003excel的spreadsheet是11.0版的,不能切换显示三个sheet表,而12.0版可以,如需要这个功能就在引用中调整。
(4).数字签名:就是添加数字证书
4.保存为专门的宏文件
加载宏实现了宏与数据的分离,将只能用于某个表的宏,变成了对所有表格都可以使用的宏。身份也由带宏文件变成了加载宏。
在Microsoft 系列办公软件中加载宏文件与普通文件比较只是多了VBA编辑的宏,但文件后缀是不同的。
如Excel的宏文件后缀为.xla,Word的宏文件后缀为.docm,PowerPoint的为.ppa等。在资源管理器中,可以看到这类文件的图标右上角会有个红立方。
在编好宏后将它放在自已指定的文件夹,注意在使用别人的宏时,系统会建议存放位置,但最好放在自已指定的位置,理由有三条:一系统文件夹不好找,二防止系统重装丢失宏文件,三方便修改文件。
Visual Basic for Applications 有菜单上有“保存”命令,用来保存编制的宏文件。
5.在软件中调用宏
保存的宏就可以调用了,不过Office 办公软件七套件之间都有些许差异。举例如下:
2003版Excel进入菜单/工具/加载宏/浏览,点击浏览,找到宏存放位置,点宏文件,确定,菜单就显示出来,下次打开EXCLE时,宏菜单会自动加载。要去掉宏菜单,进入Excel进入菜单/工具/加载宏,去掉列表中的钩就可以了。如果加载宏设置了卸载,菜单马上就会消失。如果没有设置,菜单仍然显示,但不能用,关闭软件再打开菜单就消失。下次想用,打上钩就又出现了。
2003版PowerPoint要先进入注册表注册DebugAddins,再调用。具体操作如下:
(1)点击/开始/运行,输入regedit,确定
(4)打开PowerPoint,进入VBA窗口工程资源管理器,就可以看到编辑界面了,剩下的就是编代码了。
(5)宏编好后,设置属性,添加数字签名(不添加打不开),将文件保存为ppa,然后进加载项添加
说明:ppt的加载宏无法修改保存,每次修改都要再起个名字保存,如果不想弄乱名字,就需要关掉ppt后,再删除原宏,将新保存的宏改名再调用。最佳的方法是挂个专用宏,专用宏将修改的过程导入,然后新开一个ppt文件,导入过程,去掉加载,新ppt覆盖原宏,重新加载。
2003版PowerPoint加载过程,只能用Sub auto_open(),去掉宏菜单需要去掉加载,重新打开PowerPoint。2003版Word以模板的形式存在,将加载宏设置成共用模板及加载项即可。
6.证书问题
数字证书有两种,一种是用Office自带工具制作的证书,一种找专业网站买的证书。无论哪种证书安装之后,就可以在宏安全性“高”的情况下也能打开加载宏,没有证书就只能选择“低”,给病毒机会了。
用别人编的加载宏有个安装证书的问题。在遇到有证书的宏时电脑会提示安装,标题叫“安全警告”,点击:详细信息/查看证书/安装证书/是/确定,注意在“安全警告”中把“总是相信....”的小框钩上。
证书每个人都可以制作,进入Office工具,打开“VBA项目的数字证书”,填个名字就行了。如输入:hhch
证书也是一个文件可以从系统中导出,扩展名为.cer。
安装证书很简单:进入VBA,点击菜单/工具/数字签名/选择(在这里就可以看到“hhch”证书)/确定/确定。其实不带宏的普通办公文件,建议也添加数字签名,可以防止病毒感染。
7.版本与兼容性问题
版本问题是加载宏共享要注意的首要问题。
举例:同样是2003版的Excel在模块中加入了窗体,窗体采用了spreedsheet电子表。当在其他电脑上加载时就出现了无法装载对象的提示。这都需要考虑兼容性。
Office 97-2003同一软件的加载宏,都基本相似。Excel 2007之后就有了变化。如果将功能区看成是加载命令的又一种新方式,则一切都变得很简单。
(1).Excel 2007之后,加载项是作为可选项由用户自已决定是否添加,要使用加载宏必须先进入自定义功能区的主选项卡中加上加载项和开发工具。具体操作2007和2010等各版本稍有不同。
(2).Excel 2007之后,对执行外部命令作了一些限制。语法要求更严格一点,但大多数加载宏子程序不用修改就可以使用。
(3).Excel 2007之后,加载宏是独立的工能区“加载宏”主选项卡,且以前版本的菜单仍然以菜单的形式显式,显得与功能区其他命令格格不入。工具栏则以组的形式显示在“自定义工具栏”,当打开其他选项卡后则看不到了。完全失去了老版本中随时可见的便捷性。
(4).Excel2007之后,加载过程可以用自定义功能区的方式加载。方法如下:
方法一.不考虑与07以前的版本兼容。
07之后的版本,是不会编辑加载过程的菜鸟的福音。进入EXCEL选项卡/从下列位置择命令/点击下拉菜单,选择宏,在VBA工程未锁定的情况下,有宏子程序存在,下面的大框中就会出现命令的名字。
点击新建选项,再新建选项组,选中宏子程序名,选择添加(A)>>。一个自已的宏就添加到功能区了。
方法二.考虑与老版本兼容的加载方式。
如果一个加载宏需要既用于07版之前,又用于07版之后,直接在加载过程中添加如下语句,则新版本就会自动去掉加载过程。
If Application.Version = 14# Then End
14#是2010的版本值。有了这个语句就不用看到难看的老版本菜单了,接下来就是动手建立自定义功能区来代替原菜单了。
这里有一个小技巧,2003版之前的自定义工具栏是随时可见的,到了07之后的版本被放在加载宏主选项卡,当选择其他选项卡时就看不到了,失去了便利性。07之后的版本有快速访问工具栏,可以将以前放入自定义工具栏的命令放到这里,然后设置成“在功能区下方显示快速访问工具栏”,便利性就又回来了。
自定义的功能区可以导入导出。导出文件名:Excel 自定义.exportedUI
当其他电脑也是07以上版本时只需要导入这个文件就可以了,不必再新建自定义功能区。
自定义工作区中的菜单会根据菜单自动调整排列方式和图标大小。
方法三.利用文件格式的特点添加加载宏菜单
在07版之后,许多电子表扩展名都多了一个x,这是因为以前的电子表都是二进制文件,07版之后除.xlsb文件外,其他的文件都是可以打开的XML文件的压缩包。因此只需要符合XML规则的都应该是允许的。加载宏的命令也就可以直接设计到电子表中,成为电子表的一部分。方法很简单:直接打开文件压缩包,定义文件结构关系,写加载菜单,把添加的东西塞进电子表。具体步骤如下:
(1) 打开Excel,将文件保存为加载宏文件。如:xx. xlam
(2)关闭Excel,打开放加载宏文件的文件夹。
(3)在文件夹中创建一个名为customUI的新文件夹。
(4)打开记事本,录入下面的自定义选项卡的XML代码,保存文件名:customUI.xml,保存类型:所有文件,编码:UTF-8
自定义选项卡的XML代码:
(5) 在加载宏扩展名后添加.ZIP或.RAR,让文件成本压缩包,即xx. xlam.zip
(6) 打开压缩包的_rels文件夹,拖出其中的文件.rels,用记事本修改它。在.rels文件中最后一个之前添加下面的代码:
Id属性值随意,不要与别的相同即可。Type属性必须指向自定义用户界面扩展的架构,因此使用如代码中显示的URL。Target属性指向自定义文件的位置。
(7)将修改后的_rels文件拖回原位置,替换原文件。
(8)将customUI文件夹,连夹带文一起放到压缩包中。
(9)将添加的扩展名.zip删除,还原为加载宏。
说明:上述代码只是很简单的一个例子,用记事本编辑,在浏览器中打开,检查是否显示正常,如果提示错误 则再修改即可。也可以在EXCL选项-常规:打开“显示加载项用户接口错误(U)”,根据提示自已调试。如果对代码不熟悉,可以借助Microsoft Office 2007 Custom UI Editor或XML Notepad XML专门的代码的工具。
这个方法设计出来的加载菜单,嵌到了电子表中,只要打开表就出现,表关闭就消失。不再受其他任何限制,是07版之后又一非常流行的方法。
8.加载宏的卸载问题
若要节省内存并加快 Office的运行速度,卸载不常用的加载宏是一个好办法。卸载加载宏之后,其功能和命令都将从 Office 中删除,但加载宏文件本身仍保留在计算机上以待重新加载。
组件对象模型(COM)加载项,它在多种编程语言(包括 Visual Basic 、Visual C++ 和 Visual J++)中提供了附加功能。作为开发者,您可以在 Microsoft Visual Basic 帮助中查找有关设计 COM 加载宏的信息。开发和测试时,可以在使用加载宏的安装程序之前在 Office 中加载或卸载 COM加载项。
加载宏文件一般并不大,以Excel2010为例子空白表也就8KB,附加在表上的宏程序是以无格式文本存在,因此500KB的加载宏几乎可以完成一个财务人员的所有需求。对于1GB以上内存的电脑没有丝毫负担。并且对打开Office也没有什么明显影响。
1.设计思想
哪些工作可以设计成宏?这是许多宏编辑人员迷糊的问题,也是需求人员迷糊的问题。设计遵循一个原则:“重复的也就是可以自动化的”。
第一种重复是操作重复行为。例如Excel中的自动筛选,每次都需要填写条件,在需要反复对比数据时,就显得很麻烦,这样就可以设计一个宏,直接将选择单元格的值自动作为条件,并执行筛选,这个宏起个名叫“自由筛选”。这不仅能提高工作效率,还能减少职业病“腕管综合征”。
另一种重复是工作重复行为。财务人员每月底都有一些固定的工作要做,这些固定工作就可以设计成宏。
例如:金蝶K3材料账每月底都需要将未配发票的入库材料生成估价凭证,一张凭证约5分钟完成,有100个供应商,就最少8小时才能完成,工作不复杂,纯机械式操作,每月进行。设计一个宏叫“K3自动生成凭证”,考虑网速约0.5分钟一张凭证。月底将未配票供应商在Excel表中列出,在k3生成凭证界面设置好生成条件,午休下班前执行宏,利用午休就可以完成。
对于第二种重复,有一种很错误的观念,“我的表很复杂,不可能自动化”。其实正因为复杂,借助电脑才可以大大的减少错误,提高效率。随着不断完善,程序会变得非常可靠。只要数据有来源、依据和算法,就可以自动化。
事实上一些很复杂的、数据量大的表,编程时间与做表时间几乎相当。原因很简单,涉及到具体的步聚时,编程并没有什么科技含量,做表与编程是一样的工作。如果遇到了大数据,重复操作,程序处理是一忽而就,岂是手工能比?
对于一些繁琐的表格调整,宏的效率更是远非人工可比较:无遗忘,不因人而异,只要注意原始表格数据尽量引用从其他软件导出的数据,可保证每次处理的结里完全一致。
有点遗憾的是,专用菜单换个公司或换个电脑就必须得重新考虑原始数据的存放,以及不同公司数据上的不同特点和操作系统等环境因素。因此对专用菜单要尽可能考虑人机对话,给操作者一定的自主权。
2.设计路线
宏是为了减轻工作负担,因此大可先按手工操作的方式做初步设计,然后在工作中逐步优化。
加载宏设计中一个最简便的方法是边操作边录制宏,再修改。修改包括删除重复不需要的动作,添加条件判断,添加循环过程,添加人机对话。
当有了一些程序积累后,大量套用已有程序,编程会变得非常高效。
宏设计不同于用C++等程序设计,宏设计可以从任何可以自动处理的环节着手。边工作边设计,形成一个个的子程序,手工做一点,程序帮一下手。效率也就有了提升。随着工作的不但重复,设计工作也就会不断的明确。等到各环节都成熟了,串起来就变成全自动化了,点一点鼠标就可完成一个看似非常复杂的工作。
3.设计对象
加载宏的设计并不是仅限于一张表或几张表的处理,也并不限于对软件本身的操作,看看宏病毒的神出鬼没就能明白宏的强大。
加载宏是对软件功能的扩展,但并不限于软件本身。例如Excel并不仅是画画表格,更多的是充当其他软件数据延伸处理的工具。用了加载宏之后Excel就可变成其他软件的自动中转中心、联动中心、控制中心。
以Excel为例子:
加载宏可以对Excel表中的数据处理,包括将报表自动生成数据分析图,然后直接调动PowerPoint自动生成PPT,调动Word生成报告,调动Outlook自动邮件发送。
加载宏可以通过SendKeys等语句,模拟手工方式对财务软件自动操作,操控HprSnap的文本捕捉功能对打印页面、明细表等不能直接复制的地方取数据,操作bat在后台找设计图纸等。
宏可以通过注册表或文本等直接简单的方式进行环境对接,参数传递,实现一个软件的宏调动另一个软件的宏目的,许多以前看上去一个个独立的工作,独立的平台,就可以通过加载宏,组成一个廉价的真正的办公自动化。
4.设计适用人员
加载宏功能强大,对编程人员并没有太多要求,只需要注意掌握帮助中的标准用语。
借助录制宏,可以解决对象输入问题。
Microsoft 系列办公软件的VBA都有详尽的帮助说明,遇到问题时查询帮助,帮助中有许多编程实例,可供使用者参考套用。
从实践来看,许多初学编程人员都存在查询用词不标准,无法准确找到需要的帮助的问题。解决了这一问题,就解决了宏设计的全部问题。