首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >LenB函数不工作(VBA)

LenB函数不工作(VBA)
EN

Stack Overflow用户
提问于 2016-06-07 14:47:36
回答 1查看 1.1K关注 0票数 1

我目前正在开发一个Access 2010应用程序,该应用程序的文本框可以接受日语字符(KANJI)的输入。一旦textbox中的焦点(On事件)丢失,它就会检查是否所有字符都是双字节的,否则就会生成警告消息。您可以参考下面的代码:

代码语言:javascript
运行
复制
If LenB(StrConv(Trim(strJapanese), vbFromUnicode)) <> Len(Trim(strJapanese)) * 2 Then
    'Inform the user to input double-byte Japanese characters
End If

问题是,即使我在文本框中输入双字节字符,上述条件也是满足的。这意味着字符串的字节长度等于它的长度。

请注意,使用此访问工具在我同事的计算机和输入日语字符将不满足上述条件-这是预期的行为。这是我的环境问题吗?我们使用相同的操作系统和相同的MS版本,所以我不明白为什么我们没有相同的结果。

我希望在这个问题上有任何帮助。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-28 18:24:14

我不知道LenB,但是如果您只想检查字符串是否包含kanji,那么简单地循环遍历字符串中的每个字符并检查AscW(char)就更容易了。这将返回一个表示字符的Unicode值的数字,所有kanji都包含在&H4E00 (一)和&H9FAF (龯)之间。唯一的例外是kanji迭代标记々,它是Unicode &H 3005。

注意: AscW返回正数从1到32767表示&H1到&H7FFF,对于&H 8000返回负数从-32768到-1。这种拆分发生在kanji Unicode块的中间,因此您不能简单地使用一个开关语句"Case &H4E00 to &H9FAF"...you必须将其拆分为"Case &H4E00 to &H7FFF,&H 8000 To &H9FAF“。

代码语言:javascript
运行
复制
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

我知道这并不能直接回答你的问题,我也不喜欢人们贴出不直接回答问题的答案,但希望这能满足你的需要。(此外,如果您想包括katakana和hiragana,这些内容分别包含在Unicode块&H30A1到&H30FE和&H 3040 to &H309F中。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37682548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档