excel 如何修复编译错误-预期的标识符

gtlvzcf8  于 2023-06-07  发布在  其他
关注(0)|答案(2)|浏览(426)

有人能指出我在正确的方向与下面的错误信息请。
前两行都以红色突出显示:

Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, _

ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Public Const VK_SNAPSHOT = 44

Public Const VK_LMENU = 164

Public Const KEYEVENTF_KEYUP = 2

Public Const KEYEVENTF_EXTENDEDKEY = 1

我们的组织使用Excel插件从电子表格中提取信息,该电子表格仅适用于32位Office。我正在关闭2台笔记本电脑,在一个我没有问题,它的工作,因为它应该,但在新的笔记本电脑不断出现预期的标识符错误。
有人能帮忙吗?

qyswt5oh

qyswt5oh1#

您遇到的错误可能是由于32位库与64位版本的Office不兼容。如果您在64位Office上运行此代码,则需要将API调用声明为“PtrSafe”。
以下是如何声明64位Office的keybd_event:

#If VBA7 Then
    Declare PtrSafe Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As LongPtr)
#Else
    Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
#End If

对于Office 2010和更高版本,VBA7条件常数为True,因此这样您的代码将适用于32位和64位版本的Office。此外,在64位VBA中,引入了LongPtr数据类型,该数据类型可以保存32位或64位内存地址,具体取决于版本。在您的示例中,dwExtraInfo应该是一个LongPtr。
您可以通过这种方式修改所有API调用,以确保32位和64位Office版本之间的兼容性。
请注意,此修复假定您遇到的问题是由于32位与64位的差异。如果错误仍然存在,则可能是由于代码中的其他问题。

mrwjdhj3

mrwjdhj32#

这是一个编译时错误,由行继续符_后的空行引起
可以完全按照所描述的那样复制:

删除空行将解决此问题。

相关问题