VBAselect性地将双字节转换为单字节字符

我已经写了我的第一个VBA子,它的工作方式是它应该的,但我无法弄清楚那个部分是错的。 它应该有select性地将双字节空格,字母,数字和标点符号转换为单字节,当有一串双字节的日文和拉丁文字符和空格时。

在这张图片中,顶行代表input,底行代表空格,字母,数字和标点符号转换为单字节,而日文字符保持不变。

但是,这是我运行子时发生的事情。 很明显,这是工作,但也有一些与我的连接。

下面的代码是基于“捕获和转换”与有问题的全angular字符对应的UTF-16代码的范围。 它只在本地机器上运行(即当语言/地区设置为日本时),但我不认为我的代码问题与本地化function有关。 任何帮助我做错了将大大,非常感谢!

Public Sub Converter() Dim objRange As Range For Each objRange In ActiveSheet.UsedRange Call Alphanumeric(objRange) Next End Sub Private Sub Alphanumeric(ByRef objRange As Range) Dim strIn As String Dim strOut As String Dim strAlphanumeric As String Dim i As Integer If objRange.HasFormula Or _ VarType(objRange.Value) <> vbString Then Exit Sub End If strIn = objRange.Value strOut = "" strAlphanumeric = "" For i = 1 To Len(strIn) If AscW(Mid(strIn, i, 2)) + 65536 >= 65280 And _ AscW(Mid(strIn, i, 2)) + 65536 <= 65370 Then strAlphanumeric = strAlphanumeric & Mid(strIn, i, 1) Else If strAlphanumeric <> "" Then strOut = strOut & StrConv(strIn, vbNarrow) strAlphanumeric = "" End If strOut = strOut & Mid(strIn, i, 1) End If Next objRange.Value = strOut End Sub 

我怀疑这条线

strOut = strOut & StrConv(strIn, vbNarrow)

应该在我眼前

 strOut = strOut & StrConv(strAlphanumeric, vbNarrow)