zoukankan      html  css  js  c++  java
  • Office、VBA开发方案选择指南

    最近很多朋友向我提出Office的开发方式方面的疑惑,主要是针对特定的系统和Office版本不知道选择哪一种编程语言、创建哪一种类型的项目。

    事实确实如此,如果搞不清楚语言的特性和项目类型的特点,很可能走很多弯路。也可能导致开发完的产品不能部署在客户电脑上。

    无论从哪一个角度讲,Office开发都是一个相当庞大、复杂的话题。

    下面是我整理出的一个按照开发项目分类的表格(*凡是写有VB.NET的地方,表示C#语言也可以做到)。

    话题1:32位和64位的问题

    Windows系统分为32位和64位。

    32位系统中只能安装32位Office。

    64位系统中可以安装32位Office,也可以安装64位Office。

    有的同学不知道现在用的Office是多少位,查看方法是,Excel中点击【文件】,进入Backstage视图,选择【账户】,点击“关于Excel”

     弹出一个对话框,写着32位。

    我经过开发和测试,发现VB6开发的dll文件不能用于64位Office及其VBA环境。

    但是,VB6开发的VB6外接程序,可以用在64位系统中的VB6,这可能是VB6本身不区分32和64位。

    这样得出如下结论:

    64位系统下的64位Office,这种环境下就别思考用VB6去开发Office的COM加载项,以及VBA的加载项了。

    那么剩下的其他情况,仍然可以使用VB6。

    话题2:动态链接库、自定义函数、外接程序的区别

    以上三个名词,确实有联系也有区别。

    • 动态链接库一般指的是用VB6创建的ActiveX DLL项目,编译生成后的是一个dll文件。可以在VBA工程或VB6工程中的引用中使用该dll文件,从而在代码中调用dll中的函数和方法。也就是说:动态链接库通常没有界面,只让你从其他程序代码中调用封装在dll中的函数。
    • 自定义函数,通常指的是Excel工作表中的扩展函数,这种自定义函数可以像SUM、Average一样被使用。自定义函数可以来源于VB制作的动态链接库,也可以来源于VB.NET制作的类库项目,还可以来源于Excel-DNA项目。
    • 外接程序指的是寄生在Office或VBA或VB6中的COM加载项,使用VB6创建ActiveX DLL项目就可以实现多个Office组件共享的COM加载项,也可以开发VBA、VB6编程环境中的COM加载项。同样使用VB.NET也可以做到。

    话题3:如何判断一个COM加载项是哪一种项目类型做出的?

    很多情况下,别人发给我一个安装包,我安装了以后可以正常使用,但是怎么知道这个产品是哪种开发方式呢?

    下面介绍一个粗略的方法。

    在COM加载项对话框中,选中那个你比较关心的COM加载项,看他的位置。如果显示的是mscoree.dll,那应该是VB.NET或C#开发的外接程序项目。 

    位置中格式如file:///...|vstolocal,这种的是VSTO外接程序项目。

    如果位置中,是本地磁盘中明确的一个dll文件的路径,可能是VB开发的COM加载项。

    话题4:COM加载项开发过程中的自定义界面如何选择

    如果开发对象是Office 2003,只能自定义菜单和工具栏,插件加载时创建自定义工具栏,卸载时删除工具栏。如果不删除工具栏,会产生垃圾。

    如果开发对象是VBA或VB6编程环境,也只能自定义菜单和工具栏。

    如果开发对象是Office 2007以上版本,可以使用自定义菜单和工具栏、使用Ribbon XML自定义功能区等,也可以创建任务窗格。

    总结:

    • VB6和VB.NET都可以作为Office和VBA的开发语言,都可以创建共享外接程序,可以在一个工程或项目内部实现多个COM加载项。而且,这种开发方式不限组件,只要有COM对话框的Office组件都可以用以上语言开发,例如开发Access的COM加载项。
    • 从语言本身来讲,VB.NET比VB6强大。
    • 上面表格中列出的15种开发方式,我都亲手实践过,结论可靠。
    • 其中VBE2014、VBE2019、Favorite、API函数库是颇具代表性的作品。

    本贴中写的不严谨的地方,大家可以发邮件至32669315@qq.com联系我。

    如果大家对上面那一部分感兴趣,可以翻看我的博客园中其他博文。

  • 相关阅读:
    Html禁止粘贴 复制 剪切
    表单标签
    自构BeanHandler(用BeansUtils)
    spring配置中引入properties
    How Subcontracting Cockpit ME2ON creates SD delivery?
    cascadia code一款很好看的微软字体
    How condition value calculated in sap
    Code in SAP query
    SO Pricing not updated for partial billing items
    Javascript learning
  • 原文地址:https://www.cnblogs.com/ryueifu-VBA/p/10946560.html
Copyright © 2011-2022 走看看