我必须重构一个旧宏,它在新的MS 365版本中失败了.
对于kernel32和User32,我在顶部声明了函数变量,如下所示:
#If Vba7 Then
Declare PtrSafe Function lstrcpy Lib "kernel32" (ByVal lpString1 As Any, ByVal lpString2 As Any) As LongPtr
#Else
Declare Function lstrcpy Lib "kernel32" (ByVal lpString1 As Any, ByVal lpString2 As Any) As Long
#EndIf 但是,我是否可以在函数中使用条件编译,例如:
Function CopyToClipboard(ByVal Msg as String)
#If VBA7
Dim hWindow as LongPtr
#Else
Dim hWindow as Long
#End If
.
.
End Function它在某些系统中工作,但是copyToclipboard在某些系统中仍然失败。我在StackOverflow中看到了一些VBA的复制剪贴板功能,但它们在某些系统中仍然失败。
任何输入对于如何解决这个问题都是非常有帮助的。
更新:我最后为解决这个问题所做的事情是,我在下面的条件下附上了我的声明,它同时处理VBA7和VBA6,以及使用Win64条件参数处理32位和64位系统。
#If Vba7 Then
#If Win64 Then
Declare PtrSafe Function lstrcpy Lib "kernel32" (ByVal lpString1 As Any, ByVal lpString2 As Any) As LongPtr
#Else
Declare Function lstrcpy Lib "kernel32" (ByVal lpString1 As Any, ByVal lpString2 As Any) As Long
#End If
#Else
Declare Function lstrcpy Lib "kernel32" (ByVal lpString1 As Any, ByVal lpString2 As Any) As Long
#EndIf 我复制了32位系统的VBA6声明,因为我认为LongPtr没有得到正确的解析,并且宏正在失败。现在它在每一个系统中都能完美地工作。
发布于 2020-12-15 08:07:21
我建议提供以下资源:
这不仅适用于函数声明(主要用于函数),也适用于正常代码。
例如,您甚至可以将它用于…。
您展示的示例是实现这一目标的完美和正确的方法。
如果您不确定您的函数声明,请检查正式引用:
https://stackoverflow.com/questions/65301279
复制相似问题