我注意到 Office 2010 附带 Visual Basic for Applications 7.0。但是,我似乎找不到太多关于所做更改的文档。是否有人对更改进行了总结,或者有任何描述差异的资源?
4 回答
VBA6 和 VBA7 之间并没有太大的变化。引入 VBA7 是为了支持 Office 和 Windows 的 64 位版本(请参阅下文,了解这些差异是什么)。以下是主要变化:
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 个数据类型和 1 个修饰符)
LongPtr
:LongLong
和PtrSafe
一项新功能:(
CLngLng()
即 Int64)上面使用的新编译常量:
VBA7
和Win64
MSDN 上的这篇文章有更多关于 Office 2010 的 VBA 7 的变化:
VBA7 与 64 位版本的 Office 兼容。
还有其他更改...我让现场用户报告说,在 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)
完整的更改列表仍然会有所帮助......和/或文件转换器。