Visual Basic 6.0 和 VBA 之间的区别

Difference between Visual Basic 6.0 and VBA

提问人:Thomas Geritzma 提问时间:6/15/2009 最后编辑:TomalakThomas Geritzma 更新时间:4/30/2018 访问量:190339

问:

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

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

VBA VB6

评论


答:

6赞 instanceof me 6/15/2009 #1

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

评论

7赞 Karl E. Peterson 6/16/2009
不,VBA 不是 VB5/6 的修改版本,而是 VB5/6 的一个子集。看看 VB5/6 IDE 中的对象浏览器,你会看到完整的 VBA 对象库在那里使用和滥用。也就是说,VBA确实(通常,但不一定)具有默认加载的其他对象库,并默认提供与主机环境相关的全局对象。
4赞 Victor 6/15/2009 #2

VBA 代表 Visual Basic For Applications,它是旨在在 Office 套件中使用的 Visual Basic 实现。

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

51赞 fretje 6/15/2009 #3

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 共享语法。

评论

9赞 DOK 6/15/2009
实际上,Microsoft将 VB.Net 称为“Visual Basic”。请参见 msdn.microsoft.com/en-us/vbasic/default.aspx
21赞 Tomalak 6/15/2009
是的。这是一个事实,每次我通过 Google 寻找 VB 或 VBA 特定的帮助时,我都想拔掉头发。愚蠢的营销决策。
8赞 fretje 6/15/2009
@Tomalak:这就是为什么我刚刚注意到;-)
3赞 fretje 6/15/2009
@DOK:是的,但这并不能改变这样一个事实,即 VB.NET 是另一种语言,而不是“我们开发人员”所知道的 VB6 或更早版本的 Visual Basic。
4赞 Scott Conover 7/27/2012
@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/...
15赞 Dario 6/15/2009 #4

您想将VBA与VB-Classic(VB6...)或 VB.NET 进行比较吗?

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

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

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

示例:设置 excel-cell 的值

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

VBC 和 -.NET 不是脚本语言。您可以使用它们来编写具有单独 IDE 的独立应用程序,而 VBA 无法做到这一点(VBA 脚本只是“存在于”Office 中)

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

188赞 Tomalak 6/15/2009 #5

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

评论

8赞 Tomalak 6/15/2009
microsoft.com 页面上似乎没有简洁的比较页面,或者他们隐藏得很好。我只想说 VB 6.0 代码在 VBA 中原封不动地运行,当然,除非您引用了 VBA 未附带的 COM 对象。
7赞 Dick Kusleika 6/15/2009
VBA 和 Vb6 使用相同的 dll 文件,这就是代码在其中任何一个中运行的原因。但是,VB6 中有一个类似 Printer 对象的东西不在 VBA 中,我不知道为什么会这样。否则,我相信基本语言没有区别。
51赞 Oorang 6/15/2009
这就是为什么我认为值得补充的是,打开 Office 文档的风险与打开可执行文件的风险几乎相同。
15赞 Karl E. Peterson 6/16/2009
除了 Printers 集合之外,VB 还具有 Clipboard、Screen 和 App 对象。表单包是完全不同的,因为您必须竭尽全力避免在 VB 中使用窗口化控件,但在 VBA 中,使用面向 hWnd 的 API 调用要困难得多,因为大多数控件都是无窗口的。而且,说到控件,您可以在 VB 中创作自己的控件,并在 VBA 以及其他地方使用它们。还有很多其他问题 - 请参阅对象浏览器(在 IDE 中按 F2)。
7赞 Erik A 7/5/2018
请注意,这已经过时了。VBA 已更新到 VBA 7,支持 64 位数据类型(LongLong、LongPtr)和更多更改。VB 停留在版本 6 上,因此它不支持这些新功能。此答案讨论了更多更改。简而言之,现在有些事情 VB 做不到,但 VBA 可以。
11赞 anonymousType 6/15/2009 #6

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

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

评论

11赞 AMissico 3/5/2010
此功能未删除。Microsoft只是没有更新“Office XP Developer”以支持更高版本。您仍然可以安装开发人员,它可以毫无问题地工作。它只是不受 Microsoft 支持。这是因为 2003/2007 附带的 VBA 仍然是与 XP/2002 相同的 VBA 版本。
46赞 Joshua Honig 3/24/2014 #7

这是对一个老问题的更专业、更彻底的回答:Visual Basic for Applications (VBA) 和 Visual Basic (pre-.NET) 不仅是相似的语言,而且是同一种语言。具体说来:

  • 它们具有相同的规范:对语言包含的内容及其含义进行与实现无关的描述。您可以在此处阅读:[MS-VBAL]:VBA 语言规范
  • 它们具有相同的平台:它们都编译为 Microsoft P 代码,而 P 代码又由完全相同的虚拟机执行,该虚拟机在 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编译器(即Visual Studio 6)的最后一个版本中使用的VBA”。与 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 调用方面。

评论

2赞 EJ Mak 12/12/2016
我记得 Lomax 书中的那句话,但鉴于这个论坛、维基百科等上所有其他相反的陈述,这让我想知道谁是对的,为什么会有分歧!Lomax 还写道(第 3 页),“无论您是使用它来创建 VB 应用程序还是在 Word 或 Excel 中自动执行某些任务,VBA 都是同一种语言。此外,“VBA 是一种托管语言,是 VB 开发工具系列的一部分。
1赞 ACatInLove 2/7/2018
如果在 VB6 中选择“帮助”,请转到 VBA 语言参考。VB6 与 Word 一样,承载 VBA 语言。由于 Application 对象是全局对象(自动化标准)。VB6 提供了一个适用于独立程序的 App 对象。Word 为 Word 宏提供 App 对象。请注意,语言是相同的,任何对缺失内容的引用都是对主机提供的对象(如 VB6 打印机对象)的引用 - 它不是语言的一部分,而是主机的一部分。
0赞 david 5/10/2022
当我使用 VB6 和 VBA 时,VBA 加载了 VBA 运行时库~除非 VB6 运行时库已经在内存中~。如果 VB6 库已在内存中,则 VBA 链接到该库。
4赞 Serenity 4/11/2015 #8

VB 不是一种语言。VB 是承载 VBA 的程序,就像 Office 承载 VBA 一样。VB 是一组 App 对象,就像 Word 和 Excel 一样,也是一个表单包,就像在 Office 中一样。

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

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

从 VBA 信息

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

评论

3赞 Erik A 7/5/2018
这个答案是完全错误的。VBA 不是 VB6,它们是共享许多功能的不同实体。这句简短的引述并不能证明什么。说它不是一种语言,因为它运行在主机上,也会将 JavaScript 等语言谴责为非语言,这显然是不正确的。此外,VB6 程序可以编译成独立的程序,这使得它们不需要任何主机(即 Windows 除外)。
0赞 MILO 10/3/2019
@ErikA 不,你误解了他们在说什么。VB6 中的 VB 是运行 VBA 的主机应用程序,就像 Office 应用程序一样。 VB6 恰好是一个允许您发布二进制文件以创建独立文件的应用程序。上面还有其他答案可以解释细节。
1赞 user65795 8/28/2015 #9

VB(仅限 Visual Basic 6.0 及以下版本)是 VBA(Visual Basic for Applications)的超集。我知道其他人有点回避这一点,但我的理解是 VBA 的语义(即词汇表)包含在 VB6 中(特定于 Office 产品的对象除外),因此,VBA 是 VB6 的子集。语法(即单词的书写顺序)在 VBA 中与在 VB6 中完全相同,但区别在于 VBA 或 VB6 可用的对象不同,因为它们具有不同的用途。具体来说,VBA 的目的是以编程方式自动执行可以在 MS Office 中完成的任务,而 VB6 的目的是创建标准 EXE、ActiveX 控件、ActiveX DLL 和 ActiveX EXE,它们可以独立工作,也可以在其他程序(如 MS Office 或 Windows)中工作。

评论

0赞 ACatInLove 2/7/2018
VB6 承载 VBA 语言。这是相同的。VB6 作为主机,提供某些对象,就像 Word 在其托管时所做的那样。