Excel VBA 代码:x64 版本中的编译错误(需要“PtrSafe”属性)

vbaexcel

1个回答

写回答

A33411904

2025-06-25 23:45

+ 关注

excel
excel

在使用 excel VBA 编写代码时,有时我们可能会遇到一些编译错误。其中一个常见的错误是在 x64 版本中出现的错误,错误提示需要添加“PtrSafe”属性。那么什么是“PtrSafe”属性呢?

excel VBA 中,PtrSafe 属性用于指示代码是否是 64 位版本的兼容。由于 64 位操作系统和 32 位操作系统在内存分配和数据类型方面存在一些差异,因此在编译 64 位版本的代码时,需要添加 PtrSafe 属性来确保代码的正常运行。

在编译 64 位版本的代码时,我们需要在函数和子程序声明语句中添加 PtrSafe 属性。这样一来,excel 就能够正确地处理指针和内存分配。如果在编译 64 位版本的代码时没有添加 PtrSafe 属性,就会出现编译错误,并且代码无法运行。

让我们来看一个简单的示例,以便更好地理解这个问题。假设我们有一个名为 "GetData" 的函数,它的作用是从一个数据源中获取数据,并返回一个字符串值。

VBA

#If VBA7 And Win64 Then

Private Declare PtrSafe Function GetData Lib "data.dll" () As String

#Else

Private Declare Function GetData Lib "data.dll" () As String

#End If

Sub TestGetData()

Dim result As String

result = GetData()

MsgBox result

End Sub

在上面的代码中,我们使用了一个声明语句来引用一个名为 "GetData" 的函数。该函数位于名为 "data.dll" 的动态链接库中。在声明语句中,我们使用了 #If...Then...#Else...#End If 语句来根据编译环境选择不同的声明语句。

在 32 位版本的代码中,我们不需要添加 PtrSafe 属性,因为默认情况下 excel VBA 会将代码视为 32 位版本的兼容。但是,在编译 64 位版本的代码时,我们需要在声明语句前添加 PtrSafe 属性来确保代码的兼容性。

现在,我们可以将上面的代码保存并尝试运行。如果你的系统是 64 位的,并且没有添加 PtrSafe 属性,你将会收到一个编译错误的提示,指示你需要添加 PtrSafe 属性。

为了解决这个问题,我们只需要在声明语句的开头添加 PtrSafe 关键字,如下所示:

VBA

#If VBA7 And Win64 Then

Private Declare PtrSafe Function GetData Lib "data.dll" () As String

#Else

Private Declare Function GetData Lib "data.dll" () As String

#End If

现在,我们保存代码并再次尝试运行。如果一切顺利,代码应该能够顺利编译和运行,而不会出现编译错误的提示。

在编写 excel VBA 代码时,如果需要编写 64 位版本的代码,我们需要添加 PtrSafe 属性来确保代码的兼容性。通过添加 PtrSafe 属性,excel 将能够正确处理指针和内存分配,从而避免编译错误的出现。

在上面的示例中,我们演示了如何在声明语句中添加 PtrSafe 属性。这个简单的修改可以确保我们的代码在 64 位版本的 excel 中正常运行。记住,在编写 64 位版本的代码时,始终要添加 PtrSafe 属性以避免出现编译错误。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号