Visual Basic 6.0和VBA之间的区别

Tho*_*zma 203 vb6 vba

两者有什么区别.我一直认为VBA是VB的某种"残缺"版本,但是当有一天朋友问我时,我不知道实际的差异是什么.

另外,当您使用Excel时,是VB还是VBA?

Tom*_*lak 170

对于几乎所有的编程目的,VBA和VB 6.0是相同的.

VBA无法将您的程序编译为可执行二进制文件.您将始终需要主机(例如Word文件和MS Word)来包含和执行您的项目.您也无法使用VBA创建COM DLL.

除此之外,IDE有所不同 - 相比之下,VB 6.0 IDE更强大.另一方面,您在VBA中紧密集成了主机应用程序.应用程序全局对象(如"ActiveDocument")和事件在没有声明的情况下可用,因此特定于应用程序的编程很简单.

但是,没有什么能阻止你启动Word,加载VBA IDE并解决与Word无关的问题.我不确定VB 6.0是否可以(技术上)做什么,而VBA则不行.我正在寻找MSDN上的比较表.

  • 这就是为什么我认为值得补充的是,打开Office Document会带来与打开可执行文件几乎相同的风险. (45认同)
  • 除了Printers集合之外,VB还具有剪贴板,屏幕和App对象.表单包是完全不同的,因为你必须尽量避免在VB中使用窗口控件,但在VBA中使用面向hWnd的API调用要困难得多,因为大多数控件都没有窗口.而且,谈到控件,您可以在VB中创建自己的控件,并在VBA和其他地方使用它们.许多其他小问题 - 请参阅对象浏览器(在IDE中按F2). (13认同)
  • 在microsoft.com页面上似乎没有简洁的比较页面,或者他们隐藏了它们.可以这么说,VB 6.0代码在VBA中运行不变,除非你引用了VBA附带的COM对象,当然. (7认同)
  • VBA和Vb6使用相同的dll文件,这就是代码运行的原因.但是,VB6中有一个类似于Printer对象的东西,它不在VBA中,我不知道为什么会这样.否则,我认为基础语言没有差异. (7认同)
  • 请注意,这已过时.VBA已更新为VBA 7,支持64位数据类型(LongLong,LongPtr)和更多更改.VB停留在版本6,因此它不支持这些新功能.[这个答案](/sf/answers/215159311/)讨论了更多变化.总之,现在有些事情VB不能做,但VBA可以. (3认同)
  • @Braiam我已经将VBA7和VBA6之间的差异联系起来了.将VBA(现在是单独开发的)与VB进行比较是一个比较困难的比较:当将现有版本的VBA与VB6进行比较时,这些答案中的一些是有效的(fretje的一个是简短但是描述了(主要区别),比较多个版本并迭代版本中的更改对于单个答案imo来说太长了,并且比较两者的最新版本将类似于我链接的答案+ fretje的答案,并且得到一点长. (2认同)

fre*_*tje 45

VBA代表Visual Basic for Applications,因此是VB的小型"for applications"脚本兄弟.VBA确实可以在Excel中使用,但也可以在其他办公应用程序中使用.

使用VB,可以创建一个独立的Windows应用程序,这是VBA无法实现的.

但是,开发人员可以将VBA"嵌入"他们自己的应用程序中,作为自动化这些应用程序的脚本语言.

编辑:从VBA常见问题解答:

问:什么是Visual Basic for Applications?

答: Microsoft Visual Basic for Applications(VBA)是一个可嵌入的编程环境,旨在使开发人员能够使用Microsoft Visual Basic的全部功能构建自定义解决方案.使用托管VBA的应用程序的开发人员可以自动化和扩展应用程序功能,从而缩短自定义业务解决方案的开发周期.

请注意,VB.NET甚至是另一种语言,它只与VB共享语法.

  • 是.这是一个让我每次通过谷歌寻找VB或VBA特定帮助时都想脱掉头发的事实.愚蠢的营销决策. (19认同)
  • 实际上,Microsoft将VB.Net称为"Visual Basic".请参阅http://msdn.microsoft.com/en-us/vbasic/default.aspx. (9认同)
  • @Tomalak:这就是为什么我只是*注意到那个;-) (8认同)
  • @j_random_hacker在这种情况下,它几乎感觉像MS将VB.Net视为VB的变体,至少基于visual studio vb页面 - 这是不准确的.奇怪的是,这篇wiki文章提供了比MS visual studio页面更多的信息:) http://en.wikipedia.org/wiki/Visual_Basic_.NET.但是,MSDN论坛问题至少可以触及差异:http://social.msdn.microsoft.com/Forums/en-US/Vsexpressvb/thread/15f1ed35-47c4-4ae0-a8a6-16bad23f6947/ (4认同)
  • @DOK:是的,的确如此,但这并没有改变以下事实:VB.NET是“开发人员”所熟知的VB6或更早版本之外的另一种语言。 (2认同)

Jos*_*nig 39

这是对旧问题的一个更技术和彻底的答案:Visual Basic for Applications(VBA)和Visual Basic(pre-.NET)不仅仅是类似的语言,它们是相同的语言.特别:

  • 它们具有相同的规范:与语言包含的内容及其含义的实现无关的描述.你可以在这里阅读:[MS-VBAL]:VBA语言规范
  • 它们具有相同的平台:它们都编译为Microsoft P-Code,后者又由完全相同的虚拟机执行,该虚拟机在dll msvbvm [x.0] .dll中实现.

去年遇到的本旧的VB参考书中,作者(Paul Lomax)甚至断言"VBA"一直是语言本身的名称,无论是用于独立应用程序还是用于嵌入式环境(如MS Office) ):

"在我们进一步讨论之前,让我们澄清基本点.Visual Basic for Applications(VBA)是用于在Visual Basic(VB)中编程的语言.VB本身是一个开发环境;该环境的语言元素是VBA. "

微小的差异

托管与独立:在实际中,当大多数人说"VBA"时,他们特指"在MS Office中使用时的VBA",他们说"VB6"是指"在独立VBA的最后版本中使用的VBA"编译器(即Visual Studio 6)".与MS Office捆绑在一起的IDE和编译器几乎与Visual Studio 6完全相同,但限制是它不允许编译为独立的dll或exe文件.这反过来意味着嵌入式VBA项目中定义的类无法从非嵌入式COM使用者访问,因为它们无法注册.

持续开发:Microsoft停止使用Visual Studio 6生成独立的VBA编译器,因为他们切换到.NET运行时作为首选平台.但是,MS Office团队继续维护VBA,甚至从MS Office 2010开始发布带有新VM(现在称为VBA7.dll)的新版本(VBA7).唯一的主要区别是VBA7同时具有32-和64位版本,并有一些增强功能来处理两者之间的差异,特别是在外部API调用方面.

  • 我记得在Lomax的书中引用了相同的引用,但是在本论坛,维基百科等上给出了相反的所有其他陈述,它让我想知道谁是对的,为什么会有分歧!Lomax还写道(第3页),"无论您是使用它来创建VB应用程序还是在Word或Excel中自动执行某些任务,VBA都是相同的语言." 此外,"VBA是一种托管语言,也是VB系列开发工具的一部分." (2认同)

Dar*_*rio 15

你想比较VBA与VB-Classic(VB6 ..)或VB.NET?

VBA(Visual Basic for Applications)是一种嵌入在Microsoft Office应用程序中的基于vb-classic的脚本语言.我认为它的语言功能类似于VB5(它只缺少一些内置函数),但是:

您可以访问您编写VBA脚本的office文档,因此您可以例如

  • 编写宏(=自动例程,用于办公室工作中的小重复任务)
  • 为excel-cell-formula定义新函数
  • 处理办公室数据

示例:设置excel-cell的值

ActiveSheet.Cells("A1").Value = "Foo"
Run Code Online (Sandbox Code Playgroud)

VBC和-.NET不是脚本语言.您可以使用它们编写具有单独IDE的独立应用程序,而VBA无法对其进行编写(VBA脚本在Office中"存在")

VBA与VB.NET无关(它们只有类似的语法).


小智 11

实际上VBA可以用来编译DLL.Office 2000和Office XP Developer版本包含一个VBA编辑器,可用于制作用作COM Addins的DLL.

随着VSTO(VS Tools for Office)软件的出现,此功能在更高版本(2003和2007)中被删除,但显然您仍然可以以类似的方式创建COM插件而无需使用VSTO(或VS.Net)使用VB6 IDE.

  • 此功能未被删除.微软刚刚没有更新"Office XP Developer"来支持更高版本.您仍然可以安装开发人员,它可以正常运行.它并没有得到微软的支持.这是因为2003/2007附带的VBA仍然是与XP/2002相同的VBA版本. (10认同)

ins*_* me 6

这是VBA.VBA表示Visual Basic for Applications,它用于Office文档上的宏.它无法访问VB.NET功能,因此它更像是VB6的修改版本,附加组件能够处理文档(如VBA for Excel中的Worksheet).

  • 不,VBA不是VB5/6的修改版本 - 相反,它是一个子集.看一下VB5/6 IDE中的对象浏览器,您将看到完整的VBA对象库供使用和滥用.也就是说,VBA(通常但不一定)具有默认加载的其他对象库,并且默认情况下提供全局对象,这些对象与主机环境相关. (7认同)

Ser*_*ity 5

VB不是一种语言。VB是一个托管VBA的程序,就像Office托管VBA一样。VB是一组App对象(就像Word和Excel一样),以及一个表单包(就像在Office中一样)。

因此,您只能在VB中编写VBA代码。

PS此信息在VB问题页面的INFO选项卡上。

从VBA信息

VBA 6于1998年交付,包括无数许可主机,其中包括:Office 2000-2010,AutoCAD,PI Processbook和独立的Visual Basic 6.0

  • 这个答案是完全错误的。VBA不是VB6,它们是共享许多功能的不同实体。简短的报价没有任何意义。说它不是一种语言,因为它在主机上运行,​​也将诸如JavaScript之类的语言谴责为非语言,这显然是不正确的。另外,VB6程序可以编译成独立程序,这使它们不需要任何主机(即Windows)。 (3认同)