VBA 6.0和VBA 7.0之间有什么区别?

时间:2010-06-18 18:54:34

标签: vba ms-office office-2010

我注意到Office 2010附带了Visual Basic for Applications 7.0。但是,我似乎无法找到有关所做更改的文档。有没有人有变化的摘要,或描述差异的任何资源?

4 个答案:

答案 0 :(得分:44)

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

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

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

      #If Win64 Then
          Declare PtrSafe Function GetTickCount64 Lib "kernel32"() As LongLong
      #Else
          Declare PtrSafe Function GetTickCount Lib "kernel32" () As Long
      #End If
    • 如果您使用的是64位版本 Windows,是64位版本 在Office中,您可以声明API调用 喜欢:

      #If VBA7 Then
         Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" ( _
             ByVal lpClassName As String, _
             ByVal lpWindowName As String) As LongPtr
       #Else
         Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal _
             lpClassName As String, ByVal lpWindowName As String) As Long
      #End If
  2. 为了支持这一点,有:

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

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

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

答案 1 :(得分:10)

答案 2 :(得分:7)

VBA7与64位版本的Office兼容。

答案 3 :(得分: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)

OR

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

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