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
语句,因此您不会丢下错误。