Option Explicit
Option Compare Text
Option Base 1
Private Declare PtrSafe Function lstrlen Lib "kernal32" Alias "lstrlenW" ( _
ByVal lpString As Long) As LongPtr
Private Declare PtrSafe Function StrTrim Lib "shlwapi" Alias "StrTrimW" ( _
ByVal pszSource As Long, _
ByVal pszTrimChars As Long) As LongPtr
Private Function TrimWS(ByVal Text As String) As String
'unicode safe
Dim WHITE_SPACE As String
WHITE_SPACE = " " & vbTab & vbCr & vbLf & Chr(1) & Chr(2) & Chr(3) & Chr(4) & Chr(5) & Chr(6) & Chr(7) & Chr(8) & Chr(9) & Chr(10) & Chr(11) & Chr(12) & Chr(13) & Chr(14) & Chr(15) & Chr(16) & Chr(17) & Chr(18) & Chr(19) & Chr(20) & Chr(21) & Chr(22) & Chr(23) & Chr(24) & Chr(25) & Chr(26) & Chr(27) & Chr(28) & Chr(29) & Chr(30) & Chr(31) & Chr(32) & ChrW(&HA0)
If StrTrim(StrPtr(Text), StrPtr(WHITE_SPACE)) Then
TrimWS = Left$(Text, lstrlen(StrPtr(Text)))
Else
TrimWS = Text
End If
End Function
当我切换到 64 位时,上面的这个功能不起作用。 “StrPtr”区域似乎出现错误,因为它在 64 位中不存在。另外 lstrlen 似乎也不起作用。它给出了不匹配错误。
任何人都可以提供一些有关如何将其转换为 64 位的建议吗?
我尝试将原始函数交换为 LongPtr,我不确定这个函数的作用,但它会获取所有这些字符代码并对其进行测试。如果存在则运行 lstrlen 函数。
我在这件事上有点碰壁了。
最佳答案
我将 LongPtr 设置在错误的位置。现在工作正常。
Private Declare PtrSafe Function lstrlen Lib "Kernel32" Alias "lstrlenW" ( _
ByVal lpString As LongPtr) As Long
Private Declare PtrSafe Function StrTrim Lib "shlwapi.dll" Alias "StrTrimW" ( _
ByVal pszSource As LongPtr, _
ByVal pszTrimChars As LongPtr) As Long
关于excel - 将 32 位 VBA 函数转换为 64 位 VBA 函数时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74903906/