SHIFT-JIS到Unicode?

时间:2016-06-19 18:17:06

标签: vba excel-vba unicode shift-jis excel

在运行小型vba应用程序时,我想检查某个名称,例如通过简单地将单元格值与预定义的字符串匹配,const Controller = new Function; //custom exception Controller.prototype.userException = new Object; Controller.prototype.userException.createException = function (name, message, htmlMessage) { this.name = name; this.message = message; this.htmlMessage = htmlMessage; Error.captureStackTrace(this); } //test function of projectContainer object, use createException function Controller.prototype.projectContainer = new Object; Controller.prototype.projectContainer.test = function () { throw new this.userException.createException('test', 'test', 'test'); } 出现在我的表中。

如何在VBA中存储此字符串エンジン回転数?我的第一个猜测是将它存储在其字节数组中。但是エンジン回転数函数只将它存储为对应于?的63的数组。有什么提示吗?

2 个答案:

答案 0 :(得分:2)

我建议使用以下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"。双击运行它。将文本粘贴到对话框中:

input

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

result

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

然后你可以用VBA代码检查它:

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

输出应为:

output

答案 1 :(得分:0)

您可以在常规字符串变量中存储字符串。问题可能是让他们进入那里。

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

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

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

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

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

我插入了一个UserForm(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

Entering original string

String with Unicode character codes

另一种可能的解决方案,我无法在我的系统上检查您的样本,只有一次posted on an MSDN forum

  

1.在控制面板中>区域和语言选项>高级选项卡选择要在非unicode语言中使用的本机语言   程序

     

2.在VBA编辑器中选择工具>选项>编辑器格式>支持您的语言的字体