PtrSafe VBA-更新Office 64位的Excel文档
我目前正在为我们公司更新一个文档,该文档在64位Microsoft Office套件(32位仍然可以)上使用时不再运行 我知道函数和声明需要添加“Ptrsafe”这个词,但是当我将它添加到这个函数中时,它告诉我语法是错误的PtrSafe VBA-更新Office 64位的Excel文档,vba,excel,Vba,Excel,我目前正在为我们公司更新一个文档,该文档在64位Microsoft Office套件(32位仍然可以)上使用时不再运行 我知道函数和声明需要添加“Ptrsafe”这个词,但是当我将它添加到这个函数中时,它告诉我语法是错误的 Private PtrSafe Function executeSingle(Optional rurl As String = vbNullString, _ Optional qry As String = vbNullString
Private PtrSafe Function executeSingle(Optional rurl As String = vbNullString, _
Optional qry As String = vbNullString, _
Optional complain As Boolean = True, _
Optional sFix As String = vbNullString _
) As cJobject
我不知道为什么…如果你移除PtrSafe,效果会很好。有什么想法吗?在动态链接库(DLL)中声明对外部过程的引用时,应该只需要使用“Declare”语句。执行此操作时,始终建议使用PtrSafe关键字。如前所述,您不需要为自己的功能执行此操作。有关更多信息,请参见此 下面是使用PtrSafe的正确语法示例。它包括条件编译语法,在您的情况下可能很有用:
Declare PtrSafe Function GetActiveWindow Lib "User32" () As LongPtr
#If Vba7 Then
' Code is running in 32-bit or 64-bit VBA7.
#If Win64 Then
' Code is running in 64-bit VBA7.
#Else
' Code is not running in 64-bit VBA7.
#End If
#Else
' Code is NOT running in 32-bit or 64-bit VBA7.
#End If
在动态链接库(DLL)中声明对外部过程的引用时,应该只需要使用“Declare”语句。执行此操作时,始终建议使用PtrSafe关键字。如前所述,您不需要为自己的功能执行此操作。有关更多信息,请参见此 下面是使用PtrSafe的正确语法示例。它包括条件编译语法,在您的情况下可能很有用:
Declare PtrSafe Function GetActiveWindow Lib "User32" () As LongPtr
#If Vba7 Then
' Code is running in 32-bit or 64-bit VBA7.
#If Win64 Then
' Code is running in 64-bit VBA7.
#Else
' Code is not running in 64-bit VBA7.
#End If
#Else
' Code is NOT running in 32-bit or 64-bit VBA7.
#End If
您不会将
PtrSafe
放在自己的函数或子函数上,只放在从windows API或DLL导入的函数或子函数上。您不会将PtrSafe
放在自己的函数或子函数上,仅适用于从windows API或DLL导入的语句。Declare语句没有结束函数
,Declare语句应位于条件指令块内。调用正确。我拿出了结束函数语句。我想您可以将declare语句放在条件块中,但为什么这是必要的呢?条件块的目标是根据需要的时间分隔声明。因此,在VB7部分中,您将对office 64调用使用声明(使用PtrSafe和So one),而在else分支中,您将在没有PtrSafe的情况下声明相同的函数(因为如果没有PtrSafe,代码将无法在旧的office 32位上工作)。例如,使用PtrSafe的代码无法在office 2007上工作,因此,如果您需要支持旧版本的office,则需要使用这种结构。Declare语句没有End函数
,Declare语句应该位于条件指令块内。调用正确。我拿出了结束函数语句。我想您可以将declare语句放在条件块中,但为什么这是必要的呢?条件块的目标是根据需要的时间分隔声明。因此,在VB7部分中,您将对office 64调用使用声明(使用PtrSafe和So one),而在else分支中,您将在没有PtrSafe的情况下声明相同的函数(因为如果没有PtrSafe,代码将无法在旧的office 32位上工作)。例如,使用PtrSafe的代码无法在office 2007上工作,因此,如果您需要支持旧版本的office,则需要使用这种结构。