《EXCEL加载宏制作攻略.docx》由会员分享,可在线阅读,更多相关《EXCEL加载宏制作攻略.docx(6页珍藏版)》请在第一文库网上搜索。
1、EXCE1加载宏制作攻略日期:2007-08-01来源:作者:QEE用字体:大中小一、概述1,制作加载宏的一般步骤(1)创建一个新的工作薄,在其中添加代码。(2)在“文件”菜单上单击“属性”。在“文件名属性”对话框中,单击“摘要信息”选项卡,然后在“标题”框中为加载宏指定一个您希望在“加载宏”对话框中出现的名称,在“备注”框中输入您希望当用户从“加载宏”对话框选择该加载宏时在“加载宏”对话框下方出现的说明信息。(3)在“文件”菜单上单击“另存为”。在“另存为”对话框中,从“保存类型”框中选择MicrosoftOfficeExce1加载宏(*.x1a)”,然后再选择保存路径,并可在“文件名”框中
2、修改文件名。2 .加载宏的加载和卸载通过在“工具”菜单上单击“加载宏”,可以加载制作好的加载宏文件,如果它不在列表中,可以在“加载宏”对话框中单击“浏览”找到它,当某个加载宏名称前的复选框被选中时,说明它已经加载,取消选中复选框即为卸载该加载宏。3 .加载宏的作用加载宏可以扩展EXCE1的功能,将代码写在加载宏中和写在普通的工作簿中相比,有如下优点:(1)加载宏对所有打开的EXCE1文件都生效。普通工作簿的代码一般只在特定的工作簿中才生效。(2)加载宏不受宏安全级的限制,也不会有宏运行的提示。即使将安全级设为“非常高”,加载宏就象EXCE1本身固有的功能一样工作。同样,它也不会被按住的Shif
3、t屏蔽。特别提请不习惯使用加教宏而专门VBA代码书写的朋友们注意的是,加我宏的所有好处和优点,都是属于EXCE1的常规操作者的,虽然加载宏中的代码可以被其他工作簿(中的代码)调用,但这样做是繁琐而低效的,千万不要把它当成了C中的“头”文件或链接库。也许不会有很多人这样认为,但笔者初学VBA的时候,真的这样天真过。(3)加载宏在运行时其工作簿窗口是隐藏的,因此普通用户并不会感觉到它的存在。二、处理加载宏函数加载宏函数似乎是制作加载宏中最简单的,通常它只需要在模块中写一段Function代码,它就会和EXCE1自身的函数一样使用,并且出现在“插入函数”对话框的列表中。关于函数的制作,再没有其它的吗
4、?1 .为函数添加说明信息至少你可以通过对象浏览器设置“属性”为函数添加一段说明信息(对需要换行的说明可以在编辑时使用组合键CTR1+ENTER),这些信息当用户使用“插入函数”对话框时就会看到。需要说明的是,在对象浏览器中为函数添加说明信息必须在“另存为”加载宏之前,一旦文件名的后缀变为了X1A,函数的属性设置将不被接受。关于为函数定制说明信息,请参见:图示自定义函数描述信息及有关介绍。现在,请你新建一个工作簿,插入模块,粘贴下面的代码:-Btcet中如实俣牝时夕同!.作中桃柯借世Functiondx(n),byg1y1126金额小写转换为大写dx=Rep1ace(App1ication.T
5、ext(Round(n+0.00000001,2),DBnum2),.zt)dx=11f(1eft(Right(dxz3),1)=元,1eft(dx,1en(dx)-1)&”角&Rightfdxz1)&”分”,11f1eft(Right(dxz2),1)=元,dx&”角整,Hf(dx=零,叱dx&“元整”)dx=RePIaCe(ReP1aCe(RePIaCe(RePIaCe(dx,“零元零角”,巧,“零元“零角,“零W负”)EndFunction如果觉得必要,你可以设置文件属性(见一、1.(2)并为该函数添加说明,先把它做为普通的工作簿保存(我们后面还会继续用它)再另存为X1A,然后感受一下它
6、的效果吧。对已经成为X1A文件的函数说明的添加及修改并不需要总是手工先还原为X1S文件,我们稍后就会提到MaCrOoPtiOnS方法。在此之前,先来说一下与加载宏相关的WOrkbOOk事件:(1) Addin1nsta11#AddinUninstaIIo这两个事件分别发生在加载宏加载和卸载时的,因此使用这两个事件的工作簿一定是X1A工作簿,你需要记住的是,它们在加载宏作用期内各自只会发生一次,加载宏加载后每次EXCE1的打开和关闭都不会触发它们。(2)Open和BeforeCIosec和上两个事件不同,这两个事件在加载宏作用期内会被多次触发,除了分别发生在Addin1nSta1I后和Addin
7、UninStaII前之外,每次打开和关闭EXCE1时都会触发它们。清楚了上述特性,你就应该知道如何合理安排加载宏的初始化代码。2 .为函数分类默认情况下,当用户使用“插入函数”时,加载宏函数会被分类放在“用户定义”类别中。哦,没有个性!有的朋友甚至还会有被歧视的感觉呢,怎样才能和EXCE1自身的函数一样被放在“财务”类呢?我们会想到MaCrOOPtiOnS方法:App1ication-MacroOptionsMacro:=dx,Category:=1不熟悉这个方法不要紧,看完后面的例子你再去查看一下它的帮助,很快就会掌握的。现在的问题,上面的语句放在哪儿呢?首先把它放在AddinInSta11
8、事件中看看,你会发现,在第一次加载时,目的确实达到了,但当你关闭EXCE1重新打开时,却发现它又回到了“用户定义”中,看来需要放在OPen事件中:PrivateSubWorkbook_Open()ThisWorkbookJsAddin=Fa1seApp1ication-MacroOptionsMacror=dxzCategory:=!ThisWorkbookJsAddin=TrueThisWorkbook-Saved=TrueEndSub你会发现,除了我们需要的,又增加了3条语句,这是因为加载宏文件与普通EXCE1文件除了后缀形式上的区别外,一个重要的内在区别就是ISAddin属性,该属性为T
9、rue说明是加载宏工作簿,MacroOptions方法对宏的设置不能在隐藏的工作簿中进行,需要先将还原为普通工作簿,加入宏设置后再改回。这两次改变不会触发Addin1nStaI1和AddinUninSta11事件,但EXCE1会记住普通EXCE1文件的修改,因此在完成设置后,还需要加一句ThisWorkbook-Saved=True以使EXCE1忘记这种改变。下面列出了EXCE1内部分类对应的Category参数的整数。1:财务2:日期与时间3:数学与三角函数4:统计5:查找与引用6:数据库7:文本8:逻辑9:信息如果你不想记住这些整数的含义,你可以直接写成:App1ication-Macro
10、OptionsMacro=dx,Category:=财务那么是否可以为加载宏函数增加一个新类别呢?很简单!只需要将上面的Category参数改变一下就可以了:App1ication-MacroOptionsMacro:=dx,Category:=财务扩展函数”上句会在“插入函数”对话框中增加一个新类别“财务扩展函数”,并把dx函数放入其中。MacroOptions方法还有其它一些参数,可以帮助我们,包括为函数添加说明,下面语句在分类的同时会为函数增加说明。App1ication.MacroOptionsMacro:=dx,DeSCriPtiOn:=金额小写转换为大写&VbCr&参数N:要转换的
11、金额。”,Category:=财务扩展函数”让我们再次回到OPen事件中,看看这3句代码:ThisWorkbookJsAddin=Fa1seThisWorkbookJsAddin=TrueThisWorkbook-Saved=True在加载宏文件中使用类似在无耐情况下才采用的变通代码,达到的目的仅仅是一般人并不注意的函数分类,我想我已经把你引入歧途,真的很抱歉。我该如何纠正呢?我无意保留一个没有多大实用价值的技巧,我更希望由你说出来三、处理加载宏过程加载宏的另一个重用功能就是提供扩展的操作,这通常是写在模块中的SUb过程。设计加载宏过程应注意两个方面,一是代码实体,二是提供适当的接口方式以便用
12、户可以使用这些操作。在代码实体的设计上,加载宏代码与其它VBA代码看上去也许没有太多的差别,但它要求设计者更为密切地注意加载宏的运行环境,对象成员的使用也更应规范和严谨。比如,喜欢混用ThiSWOrkbOOk和ActiveWorkbook的朋友要好好看看帮助文档中二者的差别了。现在请在模块中粘贴下面的代码:SubHVCenterO,这段代码的含义很简单,让选定区域文字水平垂直居中WithSe1ection.HorizontaIAIignment=X1Center.VerticaIAIignment=X1CenterEndWithEndSub在接口处理上,一般有3种处理方式。1 .快捷键为过程设
13、置快捷键可以在另存为加载宏文件前在“工具”菜单上单击“宏”“宏”,在“宏”对话框中,单击“选项”按钮完成。也可使用前面介绍过的Macro。PtiOnS方法设置。App1ication-MacroOptionsMacro:=,HasShortcutKeyi=True,ShortcutKeyi=nA2 .菜单通过在系统菜单上增加菜单项可以将操作提供给使用者,加载宏是对EXCE1基本功能的扩充,一般不提倡使用自定义菜单来代替系统菜单。3 .工具栏可以使用EXCE1现有的工具栏上增加按钮也可以通过新建工具栏来完成。下面代码将前面的过程关联到新建的菜单项和工具栏上。-ExceF中杷杷勺现出财仲+倍品Pr
14、ivateSubWorkbook_Addin1nsta11()OnErrorResumeNext新建菜单WithApp1ication.CommandBars(I).Contro1s.Add(Type:=msoContro1Popup).Caption=测试(&T)”With.Contro1s.Add(Type:=msoContro1Button).Caption=居中”.OnAction=HVCenterEndWithEndWith新建工具栏WithApp1ication.CommandBars.Add(Name=,myCmdbar).Position=msoBarTopWith.Contr
15、o1s.Add.Face1d=352.Caption=居中”.OnAction=HVCenterEndWith.Visib1e=TrueEndWithEndSub由于工具栏和菜单生成后不会随EXCE1的关闭而消失,因此创建工具栏和菜单的代码一般应写在AddinInStaI1事件中,并且在加载宏卸载时随之卸载。下面代码卸载前面创建的工具栏和菜单。PrivateSubWorkbook_AddinUninsta11()OnErrorResumeNextDimct1AsCommandBarControI卸载工具栏和菜单App1ication.CommandBarsCmyCmdbar).De1eteForEachct1InApp1ication-CommandBars(I),ControIsIfCt1Caption=测试(&T)ThenCt1DeIeteNextct1EndSub四、处理加载宏事件原则上讲,加载宏事件应对所有打开工作簿发生的事件进行处理。加载宏事件的设计相对函数和过程的设计而言通常要复杂得多,它要求设计者具有一定的类知识和良好的代码组织能力。具体设计主要应解决两方面问题