楼主 apolloh |
下面介绍Excel中可用于部署定制的三种方法:工作簿、模板、加载项。 分发工作簿 到目前为止,我们所创建的Excel解决方案都可以称之为“工作簿级的部署”,每个创建的工作簿都以xlsx或xlsm(启用宏)的文件格式保存,这是最常用的格式。所有必需的xml和VBA代码都保存在这样的文件中。 与其它部署方法相比,工作簿级部署有很多优势,只需要简单地将工作簿发送给用户。最终用户只需要使用安全设置许可运行任何代码,并且VBA代码能够正确地随环境而变化调整,例如可变的文件路径。但这种部署方法也存在缺点,最大的问题是文件的维护,因为它违反了最佳的实践原则:逻辑与数据分离。还有一个缺点是会导致大量相同定制工作簿的副本,这样很难再更新代码。 使用模板 将文件存储为模板,这样可以在指定的内在结构上快速创建新文件。 模板的目的是在调用模板文件时,提供“新鲜干净的”工作簿,简单到只需开发者正确地设置工作簿,然后将其保存为模板。一旦将文件安装到最终用户的模板(templates)文件夹中,只需简单地选择“Office菜单——新建——我的模板”,然后双击合适的文件,就会按所选模板创建新工作簿。应该为新文件提供新名称,以免覆盖模板。 创建模板比想象的更容易。下面来创建模板文件,使用以前的示例editBox – Rename Worksheet.xlsm。打开该文件,选择“Office菜单——另存为”,从“保存类型”下拉列表中选择“Excel启用宏的模板”并提供文件名,将其保存到默认的目录下。在Windows XP中,保存模板的缺省目录为: 就这么简单!关闭该文件。 接着,单击“Office菜单——新建”,在“我的模板”中选择并打开刚保存的文件。文件打开后,看起来像保存时的样子,但注意到应用程序标题栏中文件的名字,在模板文件名后自动添加了数字1,并且没有扩展名。如果此时再以该模板新建文字,添加的数字将递增。 实际上,因为该文件还没有保存,所以缺少扩展名。一旦单击“保存”按钮,就会提示输入文件名和选择类型。该文件不会覆盖模板文件。 由于能够将模板存储在用户自已的模板目录里或者网络目录里,所以可以容易地发布和更新工作簿模板,确保都从模板中创建所有的新文件。 然而,如果模板使用了VBA,那么要保证在基于该模板创建的文件中VBA仍然起作用,必须保存为启用宏的工作簿,否则会删除VBA代码。 创建和部署加载项 加载项将数据与代码分离,并且加载项能够使定制对所有的文件都可见并可访问。 下面,以前面文章中的示例dynamicMenu-CreateFromTemplate.xlsm来介绍Excel中加载项的构建。 当准备转换某文件为加载项时,确保所有的VBA代码无缝地转移。如果文件中含有VBA代码,那么需要检查代码中ThisWorkbook的引用,以及子过程和函数前面没有加上关键字Public或Private。 因为加载项主要是xlsm文件,这些文件在代码中大都引用ThisWorkbook对象,这对于代码和数据都在相同的工作簿中没有任何问题,但是一旦该文件被转换成加载项,将要处理的数据几乎不会存储在实际的加载项中。因此,最好的方法是加载项仅仅作为代码的容器。这样,就不会担心在更新加载项时会覆盖掉用户设置和数据。 现在,打开dynamicMenu-CreateFromTemplate.xlsm文件,并打开VBE,搜索代码中的ThisWorkbook,然后决定是否应该将其替换为ActiveWorkbook。注意,大多数工作簿中的代码的目标是处理在活动工作簿(ActiveWorkbook)中的数据,而不是代码所在的工作簿(ThisWorkbook)。 然而,还需要注意代码中潜在的对ThisWorkbook对象的引用。 其次,需要注意区分Public、Private和不确定的过程和函数。默认情况下,所有没有加上Public或Private关键字的过程和函数都被视为Public。这意味着,按下Alt+F8键后出现的“宏”对话框中可以看到它们。 使程序尽可能Private,是一个良好的编程实践。创建公共的过程,以便它们能够被用户运行,然而,如果过程仅从其它过程或函数中调用,那么它们应该被声明为Private。 代码编写并修改完成后,就可以将其转换为加载项了。 转换工作簿成为加载项是非常简单的。单击“Office菜单—另存为—其他格式”,在出现的对话框的保存类型中,选择“Excel加载宏”格式(*.xlam)。此时,文件夹位置改变至“AddIns”文件夹。对于本例来说,将其命名为“createFromTemplate.xlam”,单击“保存”按钮。 下面,来安装加载项。 前面已经在系统中创建了加载项,它被存储在本地的AddIns目录中。如果发送该加载项给其他用户,并且想他们能够尽可能容易地安装加载项,那么应该直接将该加载项保存到用户的AddIns文件夹中。在Windows XP中,该文件夹位于: 打开Excel,单击“Office菜单—Excel选项—加载项—转到”,出现如下图所示的对话框。 如果将加载项保存到本地的AddIns文件夹,那么该加载项就会出现在这个对话框中。如果在其他位置存储加载项,那么需要单击“浏览”按钮来找到该文件。为了完成加载项的装载,只需简单地选中加载项名称前的复选框,并单击“确定”。 正如所看到的,创建加载项能够共享定制,而不管打开了哪个文件。 那么,如何卸载和移除加载项呢? 当装载加载项时,需要内存,因此在需要时装载加载项,不需要时卸载是一项经常使用的操作。卸载加载项非常容易,但是移除加载项则需要更进一步的操作。 要卸载加载项,但仍需要在以后能够使用该加载项,则调出上图所示的对话框后,取消加载项名称前复选框的选择。此时,该加载项并没有从系统中移除,仍然存在于加载项列表中以便需要时装载。 要彻底从系统中移除加载项,首先按上述方法将其卸载。然后,关闭Excel,找到实际的加载项文件,将其移动到其他位置或者删除。接着,打开Excel并返回加载项对话框界面,你会注意到该加载项仍然在列表中,单击该加载项前面的复选框,将出会出一条消息,提供你将会从列表中删除该加载项。选择“是”,然后关闭Excel。这是重要是,因为当关闭Excel会在维护加载项列表的注册表中设置修改。 如果需要在加载项的工作表中添加一些数据以便于使用,那该怎么办呢?此时,可以通过设置加载项的IsAddin属性为False,临时打开该工作表。 在VBE中,选择加载项工程的ThisWorkbook模块,在工程属性窗口中,将IsAddin属性设置为False。 将IsAddin属性修改为False,告诉Excel将该文件视作常规工作簿。此时所有的工作表都将可见,并且能够被修改。要再次将该文件转换为加载项,只须按上面的操作将IsAddin属性设置为True。 注意,在定制功能区时使用Personal.xlsb工作簿往往会带来一些不可预见的问题,因此推荐使用单独的加载项来存储跨Excel工作簿共享的定制。 |
2楼 herelazy |
黄版,我加载了一个别人定义的自定义函数的宏后,按照你的方法卸载,还是删除不了啊,在列表中依然存在!我应该怎么操作才能删了啦? |