【发布时间】:2010-11-02 20:37:18
【问题描述】:
这两者有什么区别。我一直认为 VBA 在某种程度上是 VB 的“残缺”版本,但前几天有朋友问我时,我不知道实际的区别是什么。
另外,例如,当您使用 Excel 时,是 VB 还是 VBA?
【问题讨论】:
这两者有什么区别。我一直认为 VBA 在某种程度上是 VB 的“残缺”版本,但前几天有朋友问我时,我不知道实际的区别是什么。
另外,例如,当您使用 Excel 时,是 VB 还是 VBA?
【问题讨论】:
对于几乎所有的编程目的,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 上的比较表。
【讨论】:
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 共享语法。
【讨论】:
这是对一个老问题的更技术性和更全面的回答:Visual Basic for Applications (VBA) 和 Visual Basic(.NET 之前的版本)不仅仅是相似的语言,它们是相同的语言。具体来说:
在去年的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 调用方面。
【讨论】:
您想将 VBA 与 VB-Classic (VB6..) 还是 VB.NET 进行比较?
VBA(Visual Basic for Applications)是一种嵌入在 Microsoft Office 应用程序中的基于 vb-classic 的脚本语言。我认为它的语言特性类似于 VB5(它只是缺少一些内置函数),但是:
您可以访问您为其编写 VBA 脚本的 office 文档,因此您可以例如
示例:设置 excel 单元格的值
ActiveSheet.Cells("A1").Value = "Foo"
VBC 和 -.NET 不是脚本语言。您可以使用它们编写带有单独 IDE 的独立应用程序,而 VBA 无法做到这一点(VBA 脚本只是“存在”在 Office 中)
VBA 与 VB.NET 无关(它们只是语法相似)。
【讨论】:
其实VBA可以用来编译DLL。 Office 2000 和 Office XP Developer 版本包括一个 VBA 编辑器,可用于制作用作 COM 插件的 DLL。
随着 VSTO(用于 Office 的 VS 工具)软件的出现,该功能在更高版本(2003 和 2007)中被删除,但显然您仍然可以在不使用 VSTO(或 VS. Net) 使用 VB6 IDE。
【讨论】:
这是 VBA。 VBA 表示Visual Basic for Applications,用于Office 文档上的宏。它无法访问 VB.NET 功能,因此它更像是 VB6 的修改版本,具有能够处理文档的附加组件(如 VBA for Excel 中的工作表)。
【讨论】:
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 代表 Visual Basic For Applications,它是一种旨在用于 Office 套件的 Visual Basic 实现。
它们之间的区别在于 VBA 嵌入在 Office 文档中(它是 Office 的一项功能)。 VB 是开发应用程序的 ide/语言。
【讨论】:
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)中工作。
【讨论】: