Code VBA Excel 2007中的红线



https://drive.google.com/open?id=1cddfhnodpxkkfvmjwiiulv3bz1u-jp9pn当我使用Excel 2007时,错误,但在Excel 2013中,它正常代码:

#If Win64 Then
    Public Declare PtrSafe Function ShowWindow Lib "user32" (ByVal hwnd As LongPtr, ByVal nCmdShow As Long) As Long
#Else
    Public Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
#End If

#If Win64 Then
    Public Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
#Else
    Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
#End If

您应该尝试:

#If VBA7 Then
    Public Declare PtrSafe Function ShowWindow Lib "user32" (ByVal hwnd As LongPtr, _
        ByVal nCmdShow As Long) As Long
#Else
    Public Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, _
        ByVal nCmdShow As Long) As Long
#End If

#If VBA7 Then
    Public Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" _
        (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
#Else
    Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
        (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
#End If

与仅检查OS版本的Win64不同,VBA7检查您的Office Suite是否为64位(而不是32位(。由于您不能在32位OS上使用64位办公室,因此在这两种情况下本质上都涵盖了您。

,即使您在64位OS中使用了32位办公室套件,您仍然被覆盖,因为您的32位套件无论如何都会使用32位内存指针。您的操作系统可能必须转换它们,但这是要处理的操作系统问题。

在您更喜欢冗余的情况下,您可以使用And操作员检查两者:

#If VBA7 And Win64

但是我个人,我只是使用VBA7语句。

您所说的"红线"不会影响您的代码。这是因为这两个语句之一无效,但是由于您在声明中使用了#IF...#Then语句,因此您不会丢下错误。

最新更新