48

我注意到 Office 2010 附带 Visual Basic for Applications 7.0。但是,我似乎找不到太多关于所做更改的文档。是否有人对更改进行了总结,或者有任何描述差异的资源?

4

4 回答 4

48

VBA6 和 VBA7 之间并没有太大的变化。引入 VBA7 是为了支持 Office 和 Windows 的 64 位版本(请参阅下文,了解这些差异是什么)。以下是主要变化:

  1. 64 位支持,主要用于 API 调用。这既用于使您的代码与您的 OS/Office 版本以及其他版本(即 Office 2003/WinXP 上的某人)一起使用

    • 如果您使用的是 64 位版本的 Windows,但使用的是 32 位版本的 Office,则可以声明 API 调用,如下所示。.

      #如果 Win64 则
          将 PtrSafe 函数 GetTickCount64 Lib "kernel32"() 声明为 LongLong
      #别的
          声明 PtrSafe 函数 GetTickCount Lib "kernel32" () 只要
      #万一
    • 如果您使用的是 64 位版本的 Windows,并且使用的是 64 位版本的 Office,则可以声明 API 调用,例如: .

      #如果是 VBA7 那么
         声明 PtrSafe 函数 FindWindow Lib "user32" Alias "FindWindowA" (_
             ByVal lpClassName 作为字符串,_
             ByVal lpWindowName As String) As LongPtr
       #别的
         声明函数 FindWindow Lib "user32" Alias "FindWindowA" (ByVal _
             lpClassName As String, ByVal lpWindowName As String) 只要
      #万一
  2. 为了支持这一点,有:

    • 三个新关键字(2 个数据类型和 1 个修饰符)LongPtrLongLongPtrSafe

    • 一项新功能:(CLngLng()即 Int64)

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

于 2010-06-18T23:37:29.150 回答
10

MSDN 上的这篇文章有更多关于 Office 2010 的 VBA 7 的变化:

http://msdn.microsoft.com/en-us/library/ee691831(loband).aspx#odc_office2010_Compatibility32bit64bit_IntroducingVBA7CodeBase

于 2010-06-21T08:23:48.817 回答
7

VBA7 与 64 位版本的 Office 兼容。

于 2010-06-18T19:03:11.343 回答
0

还有其他更改...我让现场用户报告说,在 2007 年正常运行的代码不再有效并显示错误。

例如,这适用于 VBA6 ( Excel 2007 )

PRINT STRING$(80,"=")
mynewdata = MID$(mydata, 15,4)

它打印出由“ = ”字符组成的一行作为视觉中断,然后查看mydata,跳过15 个字符并获取其中4个字符,结果存储在mynewdata中。它在 VBA7 ( Excel 2010 ) 中失败。

我确实找到了一个潜在的解决方法......

PRINT VBA.STRING$(80,"=")
mynewdata = VBA.MID$(mydata, 15,4)

或者

PRINT VBA.STRING(80,"=")
mynewdata = VBA.MID(mydata, 15,4)

完整的更改列表仍然会有所帮助......和/或文件转换器。

于 2012-12-09T15:10:28.353 回答