2015-10-14 71 views
-1

我無法連接2個字符串。第一個字符串是StrConv()的結果,第二個字符串只是一個簡單的字符串,如"K"使用StrConv後的VBA中的字符串連接

這些不工作:

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)

+0

MSGBOX是不支持Unicode的,我認爲。作爲比較嘗試'Debug.Print' ... –

+0

@TimWilliams有理由,但很少有左功能,工作,也許是因爲左功能繼承自Excel單元格和他的所有功能。我想要一個解釋:)。 –

+0

@TimWilliams - 我需要'MsgBox',因爲它要求用戶做出迴應。使用相同的'StrConv'行,'Debug.Print'在兩臺獨立的機器上顯示不同的結果,而'MsgBox'顯示我需要的同一個字母。 – ZygD

回答

2

第一個字符串中還有一些額外的東西被放置。這是不是允許第二部分可以看出

使用

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

一些研究,它是把一個空字符每個實際字符後後。

所以,如果你想在同一時間多於一個字符使用此

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

這將允許在同一時間超過一個字符。

+0

不錯的。我可以自己想想,但我沒有:)我知道在一個字母上使用StrConv後,字符串的Len變成了2。謝謝! – ZygD

+0

@ZygD謝謝,很高興我能幫上忙。我做了更多的研究,發現了實際的問題。查看編輯。 –

4

來源: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 
+0

我很喜歡這種方法!它適用於「確定」。但是對於我的真實數據'StrConv(ChrW $(240),64,1063)'返回MsgBox中的''而不是'š'。我需要'š' – ZygD

+1

我沒有其他東西可以提供 - 這真的不是我知識豐富的領域... –

+0

這些unicode的東西對我來說也非常複雜。我時常回到他們身邊,但我仍然無法在這裏建立持久的知識。我真的很看重你的意見。還有另一臺機器,我有這種問題的最多。所以也許我需要返回到你的解決方案並在它上面建立一些東西,如果在那臺機器上'Left'方法失敗返回我需要的字母。引用的文章也非常好。謝謝! – ZygD