使用 StrConv 后 VBA 中的字符串连接

String concatenation in VBA after using StrConv

我无法连接 2 个字符串。第一个字符串是 StrConv() 的结果,第二个只是一个简单的字符串,如 "K".

这些不起作用:

MsgBox StrConv("O", vbUnicode) & "K"
MsgBox StrConv("O", vbUnicode) + "K"
MsgBox CStr(StrConv("O", vbUnicode)) & "K"
Dim g(1) As String
g(0) = CStr(StrConv("O", vbUnicode))
g(1) = CStr("K")
MsgBox Join(g(), vbNullString)

预期结果是"OK"

这是StrConv的简化版本,足以看出连接不起作用。但是,我的真实情况是 StrConv(ChrW$(240), 64, 1063)

在第一个字符串中放置了一个额外的东西。这是不允许看到第二部分的原因

使用

MsgBox left(StrConv("O", vbUnicode),1) & "K"

经过一些研究,它在每个实际字符后放置一个空字符。

因此,如果您一次需要多个字符,请使用此

Msgbox Replace(StrConv("O", vbUnicode),chr(0),"") & "K"

这将一次允许多个字符。

发件人:http://blog.nkadesign.com/2013/vba-unicode-strings-and-the-windows-api/

#If VBA7 Then
    Public Declare PtrSafe Function MessageBoxW Lib "user32" _
                                    (ByVal hwnd As LongPtr, _
                                     ByVal lpText As String, _
                                     ByVal lpCaption As String, _
                                     ByVal wType As Long) As Long
#Else
    Public Declare Function MessageBoxW Lib "user32" _
                    (ByVal hwnd As Long, _
                                 ByVal lpText As String, _
                                 ByVal lpCaption As String, _
                                 ByVal wType As Long) As Long
#End If

Sub tt()


    Dim g(1) As String, r
    g(0) = CStr(StrConv("O", vbUnicode))
    g(1) = "K"
    r = Join(g(), vbNullString)

    MessageBoxW 0, r, StrConv("test", vbUnicode), 0



End Sub