Visual Basic 6.0 和 VBA 的区别
Posted
技术标签:
【中文标题】Visual Basic 6.0 和 VBA 的区别【英文标题】:Difference between Visual Basic 6.0 and VBA 【发布时间】:2010-11-02 20:37:18 【问题描述】:这两者有什么区别。我一直认为 VBA 在某种程度上是 VB 的“残缺”版本,但前几天有朋友问我时,我不知道实际的区别是什么。
另外,例如,当您使用 Excel 时,是 VB 还是 VBA?
【问题讨论】:
【参考方案1】:对于几乎所有的编程目的,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 上的比较表。
【讨论】:
microsoft.com 页面上似乎没有简洁的比较页面,或者他们隐藏得很好。只需说 VB 6.0 代码在 VBA 中运行不变,当然,除非您引用了未随 VBA 提供的 COM 对象。 VBA 和 Vb6 使用相同的 dll 文件,这就是代码在其中运行的原因。但是,在 VB6 中有类似 Printer 对象的东西不在 VBA 中,我不知道为什么会这样。否则,我相信基本语言没有区别。 这就是为什么我认为值得补充的是,打开 Office 文档的风险与打开可执行文件几乎相同。 VB 除了 Printers 集合外,还有 Clipboard、Screen 和 App 对象。表单包完全不同,因为在 VB 中您必须竭尽全力避免使用窗口控件,但在 VBA 中,使用面向 hWnd 的 API 调用要困难得多,因为大多数控件都是无窗口的。而且,说到控件,您可以在 VB 中编写自己的控件,并在 VBA 和其他地方使用它们。许多其他的小问题 - 请参阅对象浏览器(在 IDE 中按 F2)。 请注意,这是过时的。 VBA 已更新到 VBA 7,支持 64 位数据类型(LongLong、LongPtr)和更多更改。 VB 停留在第 6 版,因此不支持这些新功能。 This answer 讨论更多变化。简而言之,现在有些事情 VB 做不到,而 VBA 可以。【参考方案2】:VBA 代表Visual Basic for Applications,VB 的小型“应用程序”脚本兄弟也是如此。 VBA 确实可以在 Excel 中使用,但也可以在其他办公应用程序中使用。
使用VB,可以创建一个独立的windows应用程序,这是VBA做不到的。
但是,开发人员可以将 VBA“嵌入”到他们自己的应用程序中,作为一种脚本语言来自动化这些应用程序。
编辑:来自VBA FAQ:
问。什么是 Visual Basic for Applications?
答. Microsoft Visual Basic for Applications (VBA) 是一种嵌入式编程环境,旨在使开发人员能够使用 Microsoft Visual Basic 的全部功能构建自定义解决方案。使用托管 VBA 的应用程序的开发人员可以自动化和扩展应用程序功能,从而缩短自定义业务解决方案的开发周期。
请注意,VB.NET 甚至是另一种语言,它只与 VB 共享语法。
【讨论】:
实际上,微软将 VB.Net 称为“Visual Basic”。见msdn.microsoft.com/en-us/vbasic/default.aspx。 是的。每当我通过 Google 寻找 VB 或 VBA 特定的帮助时,这一事实让我想拔掉头发。愚蠢的营销决策。 @Tomalak:这就是为什么我刚刚注意到 ;-) @DOK:确实是这样,但这并不能改变 VB.NET 是另一种语言,而不是“我们开发人员”知道的 VB6 或更早版本的 Visual Basic 的事实。 @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/…【参考方案3】:这是对一个老问题的更技术性和更全面的回答:Visual Basic for Applications (VBA) 和 Visual Basic(.NET 之前的版本)不仅仅是相似的语言,它们是相同的语言。具体来说:
它们具有相同的规范:对语言包含的内容和含义的独立于实现的描述。你可以在这里阅读:[MS-VBAL]: VBA Language Specification 它们具有相同的平台:它们都编译为Microsoft P-Code,而后者又由完全相同的虚拟机执行,该虚拟机在 dll msvbvm[x.0].dll 中实现.在去年的old VB reference book I came across 中,作者 (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 调用方面。
【讨论】:
我记得 Lomax 书中的那句话,但考虑到这个论坛、***等网站上的所有其他相反的陈述,这让我想知道谁是对的,为什么会有分歧! Lomax 还写道(第 3 页),“无论您是使用 VBA 来创建 VB 应用程序还是在 Word 或 Excel 中自动执行某些任务,VBA 都是同一种语言。”此外,“VBA 是一种托管语言,是 VB 开发工具系列的一部分。” 如果您在 VB6 中选择帮助,请转到 VBA 语言参考。 VB6 与 Word 一样,承载 VBA 语言。因为应用程序对象是全局对象(自动化标准)。 VB6 提供了一个适用于独立程序的 App 对象。 Word 为 Word 宏提供了一个 App 对象。请注意语言是相同的,任何对缺少的东西的引用都是宿主提供的对象,如 VB6 打印机对象 - 它不是语言的一部分,而是宿主的一部分。【参考方案4】:您想将 VBA 与 VB-Classic (VB6..) 还是 VB.NET 进行比较?
VBA(Visual Basic for Applications)是一种嵌入在 Microsoft Office 应用程序中的基于 vb-classic 的脚本语言。我认为它的语言特性类似于 VB5(它只是缺少一些内置函数),但是:
您可以访问您为其编写 VBA 脚本的 office 文档,因此您可以例如
编写宏(=办公室工作中重复性小任务的自动化例程) 为 excel-cell-formula 定义新函数 处理办公室数据示例:设置 excel 单元格的值
ActiveSheet.Cells("A1").Value = "Foo"
VBC 和 -.NET 不是脚本语言。您可以使用它们编写带有单独 IDE 的独立应用程序,而 VBA 无法做到这一点(VBA 脚本只是“存在”在 Office 中)
VBA 与 VB.NET 无关(它们只是语法相似)。
【讨论】:
【参考方案5】:其实VBA可以用来编译DLL。 Office 2000 和 Office XP Developer 版本包括一个 VBA 编辑器,可用于制作用作 COM 插件的 DLL。
随着 VSTO(用于 Office 的 VS 工具)软件的出现,该功能在更高版本(2003 和 2007)中被删除,但显然您仍然可以在不使用 VSTO(或 VS. Net) 使用 VB6 IDE。
【讨论】:
此功能未被删除。微软只是没有更新“Office XP Developer”来支持更高版本。您仍然可以安装开发人员,它可以正常工作。它只是不被微软支持。这是因为 2003/2007 附带的 VBA 仍然是与 XP/2002 相同的 VBA 版本。【参考方案6】:这是 VBA。 VBA 表示Visual Basic for Applications,用于Office 文档上的宏。它无法访问 VB.NET 功能,因此它更像是 VB6 的修改版本,具有能够处理文档的附加组件(如 VBA for Excel 中的工作表)。
【讨论】:
不,VBA 不是 VB5/6 的修改版本——相反,它是一个子集。看看 VB5/6 IDE 中的对象浏览器,您会看到完整的 VBA 对象库可供使用和滥用。也就是说,VBA 确实(通常,但不一定)具有默认加载的附加对象库,并默认提供与当前主机环境相关的全局对象。【参考方案7】: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
【讨论】:
这个答案是完全错误的。 VBA 不是 VB6,它们是共享许多功能的不同实体。那个简短的引用并不能证明任何事情。说它不是一种语言,因为它在主机上运行也将诸如 javascript 之类的语言谴责为非语言,这显然是不正确的。此外,VB6 程序可以编译成独立程序,这使得它们不需要任何主机(即 Windows 除外)。 @ErikA 不,你误解了他们在说什么。与 VB6 一样,VB 是运行 VBA 的主机应用程序,就像 Office 应用程序一样。 VB6 恰好是一个允许您发布二进制文件以创建独立程序的应用程序。上面还有其他答案可以解释细节。【参考方案8】:VBA 代表 Visual Basic For Applications,它是一种旨在用于 Office 套件的 Visual Basic 实现。
它们之间的区别在于 VBA 嵌入在 Office 文档中(它是 Office 的一项功能)。 VB 是开发应用程序的 ide/语言。
【讨论】:
【参考方案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)中工作。
【讨论】:
VB6 承载 VBA 语言。它是相同的。 VB6 作为宿主提供某些对象,就像 Word 在宿主时所做的那样。以上是关于Visual Basic 6.0 和 VBA 的区别的主要内容,如果未能解决你的问题,请参考以下文章
如何使用Visual Basic 6.0将LPT1更改为LPT2?
如何在 Visual Basic 6.0 中创建带有文本框的数组
您如何处理源代码管理中的 Visual Basic 6.0 frm 和 frx 文件?
Visual Basic 6.0 ActiveReports打印对话框打印机按钮