VBA 6.0和VBA 7.0有什么区别?

我注意到Office 2010带有Visual Basic for Applications 7.0。 但是,我似乎无法find有关更改的文件。 有没有人有变化的总结,或任何资源描述差异?

VBA6和VBA7之间并没有太多变化。 引入VBA7是为了支持Office和Windows的64位版本(请参阅以下有关这些差异的内容)。 以下是关键的变化:

  1. 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. 为了支持这个,有:

    • 三个新的关键字 (2个数据types和1个修饰符): LongPtrLongLongPtrSafe

    • 一个新的函数CLngLng() (即Int64)

    • 上面使用的新编译常量VBA7Win64

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) 

一个完整的更改列表将仍然有帮助…和/或文件转换器。