最近很多朋友向我提出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联系我。

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

Office、VBA开发方案选择指南的更多相关文章

  1. Office VBA开发经典-中级进阶卷 配套资源下载

    本书源代码请到如下页面寻找: https://www.cnblogs.com/ryueifu-VBA/p/8982192.html

  2. 刘永富的Office/VBA/VSTO开发资源分享

    各种常用安装包下载:https://share.weiyun.com/5PCvqY4 简称 文件名称 描述信息 视频课程 虚拟光驱软件Daemon DAEMON_Tools_Lite_V10.1.0. ...

  3. 所有人都可以是开发人员——《Office 365开发入门指南》视频教程即将上市

      今天是春节假期的最后一天,在这里给全国的朋友们拜个晚年,祝大家身体健康,晚年幸福啊.这个春节大家过的怎么样啊,我自己是在老家过的年,家乡的年味还是比较浓的,也再次感谢朋友圈的大家给我看了各地的风光 ...

  4. 《Office 365开发入门指南》上市说明和读者服务

    写在最开始的话 拙作<Office 365开发入门指南>上周开始已经正式在各大书店.在线商城上市,欢迎对Office 365的开发.生态感兴趣的开发者.项目经理.产品经理参考本书,全面了解 ...

  5. 《Office 365开发入门指南教程》正式上线,限时优惠和邀请分享推广

    我很高兴地通知大家,<Office 365 开发入门指南教程>已经正式在网易云课堂上线,你可以通过直接访问  https://aka.ms/office365devlesson 这个短地址 ...

  6. 如何选择PHP项目的开发方案?

    我说的项目开发方案并不是谈论到底用不用PHP去开发的问题,而是当你遇到一个项目,已经决定了用PHP,然后才来看的问题:用PHP的什么开发方案. 基本上有这么几种方案.各有各的说法,良莠不齐,我就谈谈我 ...

  7. 《Office 365 开发入门指南》公开邀请试读,欢迎反馈

    终于等来了这一天,可以为我的这本新书画上一个句号.我记得是在今年的2月份从西雅图回来之后,就萌发了要为中国的Office 365开发人员写一些东西并最终能帮到更多中国用户的想法,而从2月26日正式写下 ...

  8. Office 365开发概述及生态环境介绍(二)

    本文于2017年3月19日首发于LinkedIn,原文链接在这里 在上一篇 文章,我给大家回顾了Office发展过来的一些主要的版本(XP,2003,2007,2013等),以及在Office客户端中 ...

  9. C# -- HttpWebRequest 和 HttpWebResponse 的使用 C#编写扫雷游戏 使用IIS调试ASP.NET网站程序 WCF入门教程 ASP.Net Core开发(踩坑)指南 ASP.Net Core Razor+AdminLTE 小试牛刀 webservice创建、部署和调用 .net接收post请求并把数据转为字典格式

    C# -- HttpWebRequest 和 HttpWebResponse 的使用 C# -- HttpWebRequest 和 HttpWebResponse 的使用 结合使用HttpWebReq ...

随机推荐

  1. 把a表格的内容读取出来,然后写到b表格

    把a表格的内容读取出来,然后写到b表格 #!/usr/bin/env python3 import sys #控制台要输入的两个参数格式为:python script_name.py 参数1 参数2 ...

  2. 吴裕雄--天生自然TensorFlow2教程:张量限幅

    import tensorflow as tf a = tf.range(10) a # a中小于2的元素值为2 tf.maximum(a, 2) # a中大于8的元素值为8 tf.minimum(a ...

  3. POJ 1844:Sum ”滚动“数组

    Sum Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 10494   Accepted: 6895 Description ...

  4. 数据可视化BI平台——CBoard的部署与使用(笔记整理)

    CBoard作为国内自主开发的数据可视化平台,因其方便好用而受到广大用户的使用和好评.现今CBoard有社区版和企业版两个版本,本文所述为社区版的0.4.2版本.注意:所需的一切资源以及相关参考链接都 ...

  5. JZOJ-2019-11-5 B组

    T1 给出一二维01矩阵\(f_{i,j}\), 定义点\((x_a, y_a), (x_b, y_b)\)的「距离」为\(max\{|x_a-x_b|, |y_a-y_b|\}\) 求出一矩阵\(w ...

  6. Java:面向对象的理解

    面向对象 一切皆对象.程序是对象的集合,它们通过发送消息来告知彼此所要做的.也就是说:以对象为中心,以消息(发送消息即为函数调用)为驱动.对象具有状态,行为和标识. 状态:指类的数据成员,即属性: 行 ...

  7. Linq------连表查询

    1 List<Student> list = new List<Student>() { ,sex="男"}, ,sex="男"}, , ...

  8. 协程与异步IO

    协  程 协程,又称微线程,纤程. 协程的优势:              协程的特点在于是一个线程执行.              协程的最大优势是极高的执行效率,因为子程序切换不是线程切换,而是由 ...

  9. Property or method "cancleInput" is not defined on the instance but referenced during render.

    因为我的点击事件,是动态添加上去的 报错如标题  [Vue warn]: Property or method "cancleInput" is not defined on th ...

  10. Thread--线程工作万花筒

    线程工作内存图. 线程状态.