辛辛苦苦编出来的软件不仅要自己用,而且要发布给广大有相同需要的朋友使用。软件开发者总是希望自己的成果传播得越广越好,这样可以把科技成果转换成生成力,如查能换成银子,那是最好不过了的。
MicroStation VBA虽然是VB的一种,但VBA通常都不带软件打包程序,这就给VBA程序编制者发布VBA软件带来了麻烦。在VB中我们可以用VB带的打包程序先打包,当然不是将VB生成的安装程序来发布,使用过这个打包程序的人都知道这个打包程序生成的安装程序太小儿科了,只能说能达到安装的目的,管是从界面还是速度来说都太不如人意。好在它并非一无是处,至少它可以让你知道你的软件用到那些控件、外部组件(.DLL),它会把这个软件用到的所有系统文件(通常是.ocx和.dll文件)放在一个子文件夹里。我一般都使用windows安装服务即.msi格式的安装程序进行发布,当然也可以使用其它的安装程序生成软件。如wise installer等。
由于VBA不带打包程序,这就导致在开发成功的VBA软件(运行在某一应用程序上的小组件,如运行在AutoCAD、MicroStation上的VBA程序)在发布时,使用者在安装好后,有可能打不开。我在MicroStation上进行VBA开发工程测量断面处理程序时,就遇到了这种情况。我编好的程序首先是给队里的同事用,把程序发给他们后,安装好之后,打开MicroStation,但运行VBA程序时出错,现把在程序发布中遇到的两种情况罗列如下,以供有相同爱好者借鉴,以免出现这种情况时束手无策。
第一种情况是使了外部控件,我在程序中用到了对话框控件,原以为对话框是windows的一部分,发布时应该不需要格外关注,但事实证明,这个控件必须得随程序一起发布,这个控件用到的文件是COMDLG32.OCX,只要把这个文件拷到一个目录(通常是system目录,任意目录也可),并注册即可。
您可以生成一个文本文件并命名为“install.bat”,内容为“regsvr32.exe comdlg32.ocx”,在需要注册这个控件时双击运行这个批处理文件即可,这个文件需要与.ocx文件放在同一目录下,如果不在同一目录下,需要在命令行中加上目录名。
由此可以看出,如果您在的VBA程序使用了外部控件,一定要记得这个控件对应的控件文件名,在发布时随软件一并发布并登记注册。
第二种情况,也是许多人遇到时摸不着头脑的情况,通常发生在刚安装的系统中,执行VBA程序时老出现莫名奇妙的事情。大家知道,类似char()、split()、mid()这种函数应该是系统具备的,若您遇到连些函数都提示是未定义的是不是有点傻眼?这种情况我遇到过多次,在安装好MicroStation XM后,打开VB编辑器正常,编个小程序运行正常,但一旦运行含有这些最基本字符串处理函数的程序就提示这些函数无效。经过多次摸索,microstation的VBA环境,至少是microstation xm以前的VBA环境,是不能独立运行这些字符串函数的,还没发现其它类别的函数,至少字符串函数是不能在仅安装MicroStation的情况下运行。一旦发现这种情况该如何办呢,说来也许有人不相信,安装office后这个问题就自然而然的解决了,这就是我为啥说在新装的系统最易出现这种情况的了,旧系统中因装有许多软件,VBA系统是健全的,所以这种连系统函数都不能运行的程序是不会被开发者发现的。安装office中的任意组件都可以,如word、Excel、Access等单个或多个都可以。因office的组件都含有完整的VBA系统。
除了安装office组件外,安装一下VB开发环境也是可以解决这个问题的。由于AutoCAD也有VBA环境,因此在安装有AutoCAD的计算机上不会出现上述问题。这并不是说MicroStation依赖这些软件,只能说MicroStation的VBA还有待改进。