我注意到Office 2010附带了Visual Basic for Applications 7.0。但是,我似乎无法找到有关所做更改的文档。有没有人有变化的摘要,或描述差异的任何资源?
答案 0 :(得分:44)
VBA6和VBA7之间没有太多变化。引入VBA7是为了支持Office和Windows的64位版本(请参阅下面的这些差异)。以下是主要变化:
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种数据类型和
1个修饰符):LongPtr
,LongLong
和PtrSafe
一项新功能:CLngLng()
(即
的Int64)
使用的新编译常量
上面:VBA7
和Win64
答案 1 :(得分:10)
MSDN上的这篇文章更多地介绍了Office 2010的VBA 7中的更改:
答案 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)
完整的更改列表仍然有用......和/或文件转换器。