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号