SHIFT-JIS 到 Unicode?

SHIFT-JIS to Unicode?

虽然 运行 是一个小型 vba 应用程序,但我想检查某个名称是否存在,例如エンジン回転数 出现在我的 table 中,只需将单元格值与预定义的字符串匹配即可。

如何将此字符串 エンジン回転数 存储在 VBA 中?我的第一个猜测是将它存储在它的字节数组中。然而,StrConv 函数只是将其存储为与 ? 对应的 63 数组。有什么建议吗?

我建议使用以下 VB 脚本转换复制的文本,因为 Excel 的 InputBox() 似乎不正确地处理此类输入:

s = InputBox("Enter text")
With CreateObject("Scripting.Dictionary")
    For i = 1 To Len(s)
        .Item(.Count) = "ChrW(" & AscW(Mid(s, i, 1)) & ")"
    Next
    q = Join(.Items(), " & ")
End With
MsgBox q & vbCrLf & Eval(q)

只需将其粘贴到记事本中,保存并将文件扩展名“.txt”替换为“.vbs”。 运行 双击它。将文本粘贴到对话框中:

然后生成的对话框显示用 ChrW 函数参数表示的字符串:

您可以按Ctrl+C将结果复制到剪贴板。

那你可以在VB一个代码中查看:

    Cells(1, 1).Value = ChrW(12456) & ChrW(12531) & ChrW(12472) & ChrW(12531) & ChrW(22238) & ChrW(-28958) & ChrW(25968)

输出应该是:

您可以将字符串存储 到常规字符串变量中。问题可能是让他们进去。

将它们放入字符串变量或数组中的最简单方法可能是将它们列在工作表的列中(可能在隐藏列或隐藏工作表中),然后将它们从这些单元格复制到你的字符串变量。

如果您使用的是西方设置,VBA 编辑器在粘贴时不会处理 Unicode 字符,常规输入框也不会。

为了证明字符串变量确实存储了 Unicode 字符串,您可以尝试以下操作:

Application.InputBox 将允许您粘贴 Unicode 字符串,并且可以将它们存储在常规字符串变量中。不幸的是,如果您在 VBE 中检查该字符串变量,即使存储了正确的值,您也只会看到 ? 的字符串。

这是一个示例,显示存储了正确的值 -- 我将结果输出到用户表单中。原始字符串和 Unicode 字符代码。

我插入了一个用户窗体 (UserForm1),添加了一个文本框,并允许它自动调整大小。

Option Explicit
Sub foo()
    Dim I As Long
    Dim sMyUnicode As String
    Dim S As String
    Dim TB As TextBox

sMyUnicode = Application.InputBox(prompt:="Input Unicode String", Type:=2) 'Type 2 = text

S = sMyUnicode & vbLf
For I = 1 To Len(sMyUnicode)
    S = S & vbLf & Mid(sMyUnicode, I, 1) & vbTab & Hex(AscW(Mid(sMyUnicode, I, 1)))
Next I

With UserForm1
    .TextBox1.Value = S
    .Show
End With

End Sub

另一种可能的解决方案是 posted on an MSDN forum:

,我无法在我的系统上检查你的样本

1.In Control Panel > Regional and language options> advanced tab choose the native language you want to use in language for non-unicode programs

2.In VBA editor choose tools>options>editor format> font which support your language