VBA 6.0和VBA 7.0有什么区别?
我注意到Office 2010带有Visual Basic for Applications 7.0。 但是,我似乎无法find有关更改的文件。 有没有人有变化的总结,或任何资源描述差异?
VBA6和VBA7之间并没有太多变化。 引入VBA7是为了支持Office和Windows的64位版本(请参阅以下有关这些差异的内容)。 以下是关键的变化:
-
64位支持,主要用于API调用 。 这是用来使您的代码与您的OS / Office版本以及其他人(即在Office 2003 / WinXP上的人)
-
如果您使用的是64位版本的Windows,但使用的是32位版本的Office,则可以声明如下所示的API调用。 。
#如果Win64那么 声明PtrSafe函数GetTickCount64 Lib“kernel32”()As LongLong #其他 声明PtrSafe函数GetTickCount Lib“kernel32”()As Long #万一
-
如果您使用的是64位版本的Windows, 并且位于64位版本的Office上,则可以声明API调用,如:。
#如果VBA7那么 声明PtrSafe函数FindWindow Lib“user32”别名“FindWindowA”(_ ByVal lpClassName As String,_ ByVal lpWindowName As String)As LongPtr #其他 声明函数FindWindow Lib“user32”别名“FindWindowA”(ByVal _ lpClassName As String,ByVal lpWindowName As String)As Long #万一
-
-
为了支持这个,有:
-
三个新的关键字 (2个数据types和1个修饰符):
LongPtr
,LongLong
和PtrSafe
-
一个新的函数 :
CLngLng()
(即Int64) -
上面使用的新编译常量 :
VBA7
和Win64
-
MSDN上的这篇文章更多地介绍了Office 2010的VBA 7中的更改:
http://msdn.microsoft.com/en-us/library/ee691831(loband).aspx#odc_office2010_Compatibility32bit64bit_IntroducingVBA7CodeBase
VBA7与64位版本的Office兼容。
还有其他的变化…我有在现场报告中的用户在2007年正常运行的代码不再工作,并显示错误。
例如,这在VBA6( Excel 2007 )
PRINT STRING$(80,"=") mynewdata = MID$(mydata, 15,4)
它打印出由“ = ”字符组成的行作为视觉中断,然后查看mydata ,跳过15个字符并获取4 个字符,结果存储在mynewdata中 。 它在VBA7( Excel 2010 )中失败。
我find了一个潜在的解决方法…
PRINT VBA.STRING$(80,"=") mynewdata = VBA.MID$(mydata, 15,4)
要么
PRINT VBA.STRING(80,"=") mynewdata = VBA.MID(mydata, 15,4)
一个完整的更改列表将仍然有帮助…和/或文件转换器。