Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PtrSafe VBA-更新Office 64位的Excel文档_Vba_Excel - Fatal编程技术网

PtrSafe VBA-更新Office 64位的Excel文档

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

我目前正在为我们公司更新一个文档,该文档在64位Microsoft Office套件(32位仍然可以)上使用时不再运行

我知道函数和声明需要添加“Ptrsafe”这个词,但是当我将它添加到这个函数中时,它告诉我语法是错误的

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,则需要使用这种结构。