两者的区别是什么?我一直认为VBA是VB的“残缺”版本,但当一个朋友前几天问我,我不知道实际的区别是什么。
另外,当你使用Excel时,你用的是VB还是VBA ?
两者的区别是什么?我一直认为VBA是VB的“残缺”版本,但当一个朋友前几天问我,我不知道实际的区别是什么。
另外,当你使用Excel时,你用的是VB还是VBA ?
当前回答
你想比较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(它们只是有相似的语法)。
其他回答
实际上VBA可以用来编译dll。 Office 2000和Office XP Developer版本包括了一个VBA编辑器,可以用来制作dll作为COM插件使用。
随着VSTO (VS Tools for Office)软件的出现,这个功能在后来的版本(2003年和2007年)中被删除了,尽管很明显,你仍然可以使用VB6 IDE在不使用VSTO(或VS.Net)的情况下以类似的方式创建COM插件。
下面是对一个老问题的更技术性和更彻底的回答: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。”
细微的差别
Hosted vs. stand-alone: In practical, terms, when most people say "VBA" they specifically mean "VBA when used in MS Office", and they say "VB6" to mean "VBA used in the last version of the standalone VBA compiler (i.e. Visual Studio 6)". The IDE and compiler bundled with MS Office is almost identical to Visual Studio 6, with the limitation that it does not allow compilation to stand-alone dll or exe files. This in turns means that classes defined in embedded VBA projects are not accessible from non-embedded COM consumers, because they cannot be registered.
Continued development: Microsoft stopped producing a stand-alone VBA compiler with Visual Studio 6, as they switched to the .NET runtime as the platform of choice. However, the MS Office team continues to maintain VBA, and even released a new version (VBA7) with a new VM (now just called VBA7.dll) starting with MS Office 2010. The only major difference is that VBA7 has both a 32- and 64-bit version and has a few enhancements to handle the differences between the two, specifically with regards to external API invocations.
对于几乎所有的编程目的,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与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(它们只是有相似的语法)。
VBA是Visual Basic for Applications的缩写,所以它是VB的“for Applications”脚本兄弟。 VBA确实可以在Excel中使用,但也可以在其他办公应用中使用。
使用VB,可以创建一个独立的windows应用程序,这是VBA无法做到的。
但是,开发人员可以将VBA“嵌入”到他们自己的应用程序中,作为一种脚本语言来自动化这些应用程序。
编辑:从VBA常见问题:
问:什么是Visual Basic for Applications? A. Microsoft Visual Basic for Applications (VBA)是一个嵌入式编程环境,旨在使开发人员能够使用Microsoft Visual Basic的全部功能构建自定义解决方案。使用承载VBA的应用程序的开发人员可以自动化并扩展应用程序功能,从而缩短自定义业务解决方案的开发周期。
注意VB。NET甚至是另一种语言,它只与VB共享语法。