You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

32位转64位VBA的TrimWS函数失效问题求助

修复32位VBA TrimWS函数适配64位环境

原代码存在的问题

  • 系统库名拼写错误:kernal32应为kernel32,导致无法正确加载系统函数
  • 64位环境下API参数类型不匹配:lstrlen和StrTrim的参数使用Long类型,无法适配64位的8字节指针
  • 对64位VBA的误解:StrPtr在64位环境中依然存在,返回LongPtr类型指针,并非不存在

修复后的完整代码

Option Explicit
Option Compare Text
Option Base 1

Private Declare PtrSafe Function lstrlen Lib "kernel32" Alias "lstrlenW" ( _
    ByVal lpString As LongPtr) As LongPtr
    
Private Declare PtrSafe Function StrTrim Lib "shlwapi" Alias "StrTrimW" ( _
    ByVal pszSource As LongPtr, _
    ByVal pszTrimChars As LongPtr) 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

关键修改说明

  • 修正库名拼写:将原代码中的kernal32改为正确的kernel32,确保系统能找到对应的API函数
  • 适配64位指针类型:将两个API函数的所有指针参数从Long改为LongPtr,LongPtr会根据VBA运行环境自动切换为32位的4字节或64位的8字节,完美兼容两种环境
  • 确认StrPtr的有效性:64位VBA中StrPtr并未被移除,它返回的LongPtr类型指针与修改后的API参数类型完全匹配,解决了类型不匹配错误

内容的提问来源于stack exchange,提问作者G G Synaptic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 06:05:15