Visual Basic 6.0和VBA之间的区别


208

两者有什么区别。我一直认为VBA是VB的“残废”版本,但是有一天,当朋友问我时,我不知道实际的区别是什么。

此外,例如在使用Excel时,是VB还是VBA?

Answers:


175

对于几乎所有编程目的,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上的比较表。


7
microsoft.com页面上似乎没有简洁的比较页面,或者它们很好地隐藏了它们。可以肯定地说,除非您引用VBA附带的COM对象,否则VB 6.0代码将在VBA中保持不变。
Tomalak

7
VBA和Vb6使用相同的dll文件,这就是为什么代码可以在两个文件中运行的原因。但是,VB6中有类似Printer对象的东西,而VBA中没有,我也不知道为什么。否则,我相信基本语言没有任何区别。
迪克·库斯莱卡

46
这就是为什么我认为值得添加的是,打开Office文档所面临的风险几乎与打开可执行文件相同。
Oorang

13
除了Printers集合外,VB还具有剪贴板,屏幕和应用程序对象。表单包是完全不同的,因为您必须尽力避免在VB中使用窗口控件,但是在VBA中,使用面向hWnd的API调用要困难得多,因为大多数控件都是无窗口的。而且,说到控件,您可以在VB中编写自己的控件,并在VBA和其他地方使用它们。还有许多其他麻烦-请参见“对象浏览器”(在IDE中按F2键)。
Karl E. Peterson,2009年

3
请注意,这已过时。VBA已更新为VBA 7,支持64位数据类型(LongLong,LongPtr)和更多更改。VB停留在版本6中,因此它不支持这些新功能。该答案讨论了更多更改。简而言之,现在有些事情VB不能做,但是VBA可以。
Erik A

47

VBA代表Visual Basic for Applications,VB的小型“ for Applications”脚本兄弟也是如此。实际上,VBA在Excel中可用,但在其他Office应用程序中也可用。

使用VB,可以创建一个独立的Windows应用程序,而使用VBA是不可能的。

但是,开发人员可以将VBA作为一种脚本语言“嵌入”自己的应用程序中,以使这些应用程序自动化。

编辑:从VBA常见问题解答

问:什么是Visual Basic for Applications?

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

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


9
实际上,Microsoft将VB.Net称为“ Visual Basic”。请参阅msdn.microsoft.com/en-us/vbasic/default.aspx
DOK

19
是。这就是事实,每次我通过Google寻找VB或VBA特定的帮助时,我都想把自己的头发拔出来。愚蠢的营销决策。
Tomalak

8
@Tomalak:这就是为什么我只是注意到它;-)
fretje

2
@DOK:是的,的确如此,但这并没有改变以下事实:VB.NET是“开发人员”所熟知的VB6或更早版本之外的另一种语言。
fretje

4
@j_random_hacker在这种情况下,几乎感觉就像MS将VB.Net视为VB的变体一样,至少基于Visual Studio vb页面是不正确的。奇怪的是,此Wiki文章的正面提供了比MS Visual Studio页面更多的信息:) en.wikipedia.org/wiki/Visual_Basic_.NET。但是,MSDN论坛问题看起来至少触摸上的差异:social.msdn.microsoft.com/Forums/en-US/Vsexpressvb/thread/...
JackOrangeLantern

41

这是对一个老问题的更为技术性和彻底的回答: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) ):

“在进一步研究之前,我们先澄清一下基本要点。VisualBasic 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文件。反过来,这意味着非嵌入式COM使用者无法访问嵌入式VBA项目中定义的类,因为它们无法注册。

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


2
我记得在Lomax的书中也引用了同样的话,但是鉴于在该论坛,维基百科等网站上所有其他相反的说法,这使我怀疑谁是正确的,以及为什么存在分歧!Lomax还写道(第3页),“无论您使用VBA创建VB应用程序还是在Word或Excel中自动执行某些任务,VBA都是相同的语言。” 另外,“ VBA是一种托管语言,是VB系列开发工具的一部分。”
EJ Mak

1
如果选择VB6中的帮助,请转到VBA语言参考。VB6与Word一样,承载VBA语言。由于Application对象是全局对象(自动化标准)。VB6提供了适用于独立程序的App对象。Word为Word宏提供一个App对象。请注意,语言是相同的,对所缺少内容的任何引用都是宿主提供的对象,例如VB6打印机对象-它不是语言的一部分,而是宿主的一部分。
ACatInLove

15

您要比较VBA与VB-Classic(VB6 ..)还是VB.NET?

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

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

  • 编写宏(=自动执行例程,处理办公室中的少量重复任务)
  • 为Excel-Cell-Formula定义新功能
  • 处理办公室数据

示例:设置excel单元格的值

ActiveSheet.Cells("A1").Value = "Foo"

VBC和-.NET不是脚本语言。您可以使用它们来编写具有单独IDE的独立应用程序,而这些IDE不能通过VBA来完成(VBA脚本只是“存在于” Office中)

VBA与VB.NET无关(它们具有相似的语法)。


11

实际上,VBA可用于编译DLL。Office 2000和Office XP Developer版本包括一个VBA编辑器,该编辑器可用于制作用作COM加载项的DLL。

随VSTO(Office的VS工具)软件的出现,此功能在以后的版本(2003和2007)中被删除,尽管很明显,您仍然可以通过以下方式创建COM加载项而无需使用VSTO(或VS.Net):使用VB6 IDE。


10
此功能未删除。Microsoft只是没有更新“ Office XP Developer”来支持更高版本。您仍然可以安装开发人员,并且可以正常运行。只是Microsoft不支持它。这是因为2003/2007附带的VBA仍与XP / 2002相同。
2010年

6

是VBA。VBA表示Visual Basic for Applications,它用于Office文档上的宏。它无法访问VB.NET功能,因此它更像是VB6的修改版,带有可在文档上使用的附件(例如VBA for Excel中的工作表)。


7
不,VBA不是VB5 / 6的修改版本-而是它的一个子集。看一下VB5 / 6 IDE中的对象浏览器,您将看到在那里使用和滥用的完整VBA对象库。也就是说,VBA确实(通常,虽然不是必须)具有默认情况下加载的其他对象库,并默认情况下提供与主机环境有关的全局对象。
卡尔·彼得森

5

VB不是一种语言。VB是一个托管VBA的程序,就像Office托管VBA一样。VB是一组应用程序对象,就像Word和Excel一样,还有一个表单包,就像Office中一样。

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

PS此信息位于VB的VB问题页面的“ 信息”选项卡上。

从VBA信息

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


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

@ErikA不,您误会了他们在说什么。与Office应用程序一样,VB中的VB是运行VBA的主机应用程序。VB6恰好是一个允许您释放二进制文件以创建独立文件的应用程序。上面还有其他答案可以解释细节。
typedef Miles_Williams MILO,

4

VBA代表Visual Basic for Applications及其打算在Office Suite中使用的Visual Basic实现。

它们之间的区别是VBA嵌入在Office文档中(具有Office功能)。VB是用于开发应用程序的思想/语言。


1

VB(仅Visual Basic最高为6.0)是VBA(应用程序的Visual Basic)的超集。我知道其他人对此还不了解,但我的理解是VBA的语义(即词汇)包含在VB6中(Office产品特定的对象除外),因此,VBA是VB6的子集。VBA中的语法(即单词的写入顺序)与VB6中的语法完全相同,但不同之处在于VBA或VB6可用的对象不同,因为它们具有不同的用途。特别是VBA的目的是以编程方式自动化可以在MS Office中完成的任务,而VB6的目的是创建可以独立运行或在其他程序(例如MS Office或Windows)中运行的标准EXE,ActiveX控件,ActiveX DLL和ActiveX EXE。


VB6托管VBA语言。是一样的 VB6作为宿主,可以像Word托管时一样提供某些对象。
ACatInLove
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.