VB、VBA、VB.NET、VSTO、这四胞胎,你分清了吗?
wptr33 2025-09-13 10:28 21 浏览
Visual Basic(简称VB)
是Microsoft公司开发的一种通用的基于对象的程序设计语言,为结构化的、模块化的、面向对象的、包含协助开发环境的事件驱动为机制的可视化程序设计语言。
VB是微软曾经大力推荐过的编程语言,微软创始人比尔盖茨非常钟情于Basic编程语言。这种语言集成在Visual Studio开发套件中打包发布,从VB1.0版发展到VB6版本,后来被号称VB杀手的delphi打败,停止更新。这种语言以开发快速、上手快著称。用户可以非常快速的设计出标准windows窗体界面。它可以在windows系统绿色化运行,无需安装,因为它是微软官方语言,系统中已经自带了msvbvm60.dll之类的运行时支持库。注意它的名称中有个vm,大家也可以把它理解成vb的运行虚拟机。
VBA(Visual Basic for Applications)
是Visual Basic的一种宏语言,主要能用来扩展Windows的应用程序功能,特别是Microsoft Office软件,它也可以用于其他支持VBA的环境中。
VBA是VB的一个子集。必须寄生于已有的应用程序,不能编译成EXE可执行文件,也不离开宿主环境独立运行。比如excel中的VBA,它就不能离开excel环境独立运行。
而VB是完整的编译语言,内部代码经过编译成exe后解释执行,运行速度更快,可以离开宿主环境独立运行,应用面更广。VBA代码比如模块、类模块可以简单改动成为VB的模块
比较以上两者,我们就发现VBA相对于VB来说功能上都弱很多。如果从VBA向VB方向迁移,可以发现很多相似之处,升级成本最小。
上图就是我用VB制作的一个读取EXCEL表格数据的演示程序。后期我将基于这个框架,分享一些VB操作excel的示例。有同学说VBA这么好,这么方便,为什么不用VBA?我的意见是VBA代码和数据混杂在一起,比如一个表格中有表格数据也有VBA代码,这些VBA代码容易被用户以宏安全性为由关闭,再说这种方法也不符合代码和数据分离的原则。我前面也发过一些图文,大家看我做的那些工具需要演示数据吗?代码和数据是可以分离的。
VB.NET是集成在Visual studio.NET开发套件中的一种语言,与它相伴成生的还有C #。微软官方推荐首选C#,但是为吸引更多VB老用户,仍然保留了VB语言在Visual studio.NET平台中,VB.NET从此摆脱了鄙视链低端角色,平步青云,成为完全面向对象的新语言。依托于.NET平台,或者说依赖net framework框架,VB.net获得了长足发展。
VSTO(Visual Studio Tools for Office )是VBA的替代,是.NET时代的VBA,它使用VB.net语言或者C#语言编写更加高大止的office addin外接程序,模板和工作簿。VSTO以编译后的方式发布,运行时依赖于net framework框架+VSTO环境。
上图为VS2012环境中编写VSTO的起始页。
Visual Basic .NET(VB.NET)是在.NET Framework上实现的面向对象的计算机编程语言。 虽然它是经典的Visual Basic语言的演变,但是它不兼容VB6,在任何旧版本编写的代码不能在VB.NET下编译。
像所有其他.NET语言一样,VB.NET完全支持面向对象的概念。 VB.NET中的一切都是一个对象,包括所有的基本类型(Short,Integer,Long,String,Boolean等)和用户定义的类型,事件,甚至是程序集。 所有对象从基类Object继承。
VB.NET是由Microsoft的.NET框架实现的。 因此,它可以完全访问.Net框架中的所有库。 也可以在Mono上运行VB.NET程序,Mono是.NET的开源替代软件,不仅在Windows下,甚至在Linux或Mac OSX上。
上图是我使用VBNET开发Excel的一个演示,它引用了我自己编写的一个excel类,代码只两行
Dim v As New excel
v("工作簿2.xlsx")("sheet1")(4, 5) = "df45df"
创建excel对象,并把工作簿2.xlsx的sheet1工作表中的第4行第5列单元格中写入“df45df"字符串,当然这个自建excel类还可以完成更多完成,由于集成度更高,所以很多功能虽然只一句代码,但是后面可能有100句代码在执行。这就是积木叠加的增量效果。
用VB6代替VBA,升级成本最小,如果在适用够用的情况下,VB6完全能胜任excel开发。但VB6太老了,很多新功能都不支持,需要加装很多第三方支持。
VB.net一行代码效率胜过VB很多行,这也是很多开发者转向VSTO的原因 。
VSTO相对于VB.NET,类似于VBA相对于VB6
这四胞胎同宗同源,系出同门。它们之间的差异,你分清了吗?
相关推荐
- oracle数据导入导出_oracle数据导入导出工具
-
关于oracle的数据导入导出,这个功能的使用场景,一般是换服务环境,把原先的oracle数据导入到另外一台oracle数据库,或者导出备份使用。只不过oracle的导入导出命令不好记忆,稍稍有点复杂...
- 继续学习Python中的while true/break语句
-
上次讲到if语句的用法,大家在微信公众号问了小编很多问题,那么小编在这几种解决一下,1.else和elif是子模块,不能单独使用2.一个if语句中可以包括很多个elif语句,但结尾只能有一个...
- python continue和break的区别_python中break语句和continue语句的区别
-
python中循环语句经常会使用continue和break,那么这2者的区别是?continue是跳出本次循环,进行下一次循环;break是跳出整个循环;例如:...
- 简单学Python——关键字6——break和continue
-
Python退出循环,有break语句和continue语句两种实现方式。break语句和continue语句的区别:break语句作用是终止循环。continue语句作用是跳出本轮循环,继续下一次循...
- 2-1,0基础学Python之 break退出循环、 continue继续循环 多重循
-
用for循环或者while循环时,如果要在循环体内直接退出循环,可以使用break语句。比如计算1至100的整数和,我们用while来实现:sum=0x=1whileTrue...
- Python 中 break 和 continue 傻傻分不清
-
大家好啊,我是大田。...
- python中的流程控制语句:continue、break 和 return使用方法
-
Python中,continue、break和return是控制流程的关键语句,用于在循环或函数中提前退出或跳过某些操作。它们的用途和区别如下:1.continue(跳过当前循环的剩余部分,进...
- L017:continue和break - 教程文案
-
continue和break在Python中,continue和break是用于控制循环(如for和while)执行流程的关键字,它们的作用如下:1.continue:跳过当前迭代,...
- 作为前端开发者,你都经历过怎样的面试?
-
已经裸辞1个月了,最近开始投简历找工作,遇到各种各样的面试,今天分享一下。其实在职的时候也做过面试官,面试官时,感觉自己问的问题很难区分候选人的能力,最好的办法就是看看候选人的github上的代码仓库...
- 面试被问 const 是否不可变?这样回答才显功底
-
作为前端开发者,我在学习ES6特性时,总被const的"善变"搞得一头雾水——为什么用const声明的数组还能push元素?为什么基本类型赋值就会报错?直到翻遍MDN文档、对着内存图反...
- 2023金九银十必看前端面试题!2w字精品!
-
导文2023金九银十必看前端面试题!金九银十黄金期来了想要跳槽的小伙伴快来看啊CSS1.请解释CSS的盒模型是什么,并描述其组成部分。...
- 前端面试总结_前端面试题整理
-
记得当时大二的时候,看到实验室的学长学姐忙于各种春招,有些收获了大厂offer,有些还在苦苦面试,其实那时候的心里还蛮忐忑的,不知道自己大三的时候会是什么样的一个水平,所以从19年的寒假放完,大二下学...
- 由浅入深,66条JavaScript面试知识点(七)
-
作者:JakeZhang转发链接:https://juejin.im/post/5ef8377f6fb9a07e693a6061目录...
- 2024前端面试真题之—VUE篇_前端面试题vue2020及答案
-
添加图片注释,不超过140字(可选)...
- 今年最常见的前端面试题,你会做几道?
-
在面试或招聘前端开发人员时,期望、现实和需求之间总是存在着巨大差距。面试其实是一个交流想法的地方,挑战人们的思考方式,并客观地分析给定的问题。可以通过面试了解人们如何做出决策,了解一个人对技术和解决问...
- 一周热门
- 最近发表
-
- oracle数据导入导出_oracle数据导入导出工具
- 继续学习Python中的while true/break语句
- python continue和break的区别_python中break语句和continue语句的区别
- 简单学Python——关键字6——break和continue
- 2-1,0基础学Python之 break退出循环、 continue继续循环 多重循
- Python 中 break 和 continue 傻傻分不清
- python中的流程控制语句:continue、break 和 return使用方法
- L017:continue和break - 教程文案
- 作为前端开发者,你都经历过怎样的面试?
- 面试被问 const 是否不可变?这样回答才显功底
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)
- c语言 switch (34)
- git commit (34)
