2016-06-07 52 views
1

我目前正在研究Access 2010應用程序,它們的文本框接受日文字符(KANJI)的輸入。只要焦點(On Exit事件)在​​文本框中丟失,它將檢查所有字符是否都是雙字節,否則會生成警告消息。你可以參考下面的代碼:LenB函數不能正常工作(VBA)

If LenB(StrConv(Trim(strJapanese), vbFromUnicode)) <> Len(Trim(strJapanese)) * 2 Then 
    'Inform the user to input double-byte Japanese characters 
End If 

的問題是,即使在文本框中輸入我雙字節字符,條件是滿足上述。這意味着字符串的字節長度等於其長度。

請注意,在我的同事的計算機中使用此Access工具並輸入日文字符將不符合上述條件 - 這是預期的行爲。這是我的環境問題嗎?我們使用相同的操作系統和相同的MS Office版本,所以我不明白爲什麼我們沒有得到相同的結果。

我希望對此事有任何幫助。謝謝!

+0

你能提供例如輸入,使我們可以複製? –

+0

嗨宏人,謝謝你伸出援手。你可以嘗試設置StrJapanese =兵庫県 這個想法是這個字符串的** LenB **應該是6而Len是3。 –

回答

0

我不知道LenB,但如果你只是想檢查一個字符串是否包含漢字,那麼只需循環查看字符串中的每個字符並檢查AscW(char)就簡單多了。這將返回代表字符的Unicode值的數字,並且所有漢字包含在& H4E00(一)和& H9FAF(龯)之間。唯一的例外是漢字迭代標記々,它是Unicode & H3005。

注:爲ASCW H1 & &到返回H7FFF從1到32767的正數,並從-32768返回負數爲-1 & H8000到& HFFFF。這個分割正好在漢字的Unicode塊的中間,所以你不能簡單地使用switch語句「Case & H4E00 to & H9FAF」...你必須將它拆分爲「Case & H4E00 To & H7FFF,& H8000至& H9FAF「。

Function containsOnlyKanji(str As String) As Boolean 
If Len(str) = 0 Then Exit Function 'empty strings don't have any kanji so return false 
Dim i As Long 
For i = 1 To Len(str) 
    Select Case AscW(Mid(str, i, 1)) 
    Case &H4E00 To &H7FFF, &H8000 To &H9FAF, &H3005: 'do nothing, these are kanji 
    Case Else: Exit Function       'non kanji! don't have to check the rest 
    End Select 
Next i 
containsOnlyKanji = True 'if we've made it this far, the user must have entered only kanji 
End Function 

我知道這並不直接回答你的問題,我討厭當人們張貼的答案不直接回答這個問題,但我希望這會做你需要什麼。 (另外,如果你想包括平假名和片假名,這些分別被包含在統一塊& H30A1到& H30FE和& H3040到& H309F。)

+0

謝謝特拉維斯的回答。我還沒有嘗試過,但我認爲它會這樣做,因此我會將其標記爲已接受的答案。然而,我在問這個問題時主要關注的是,我的VBA代碼在我的同事的虛擬機上工作,但不在我的虛擬機上工作。所以我想知道問題出在VM的環境下還是需要下載語言包等等。 –