excel隐藏的空间

时间:2018-03-21 11:29:19

标签: oracle excel-vba erp hidden-characters vba

我尝试了几乎所有的方法(CLEAN,TRIM,SUBSTITUTE)试图删除隐藏在文本开头和结尾的字符。就我而言,我从oracle ERP下载了物料清单报告,发现物品代码是隐藏字符的受害者。

经过这么多调查结果后,我能够追踪隐藏哪个角色,并发现它是一个问号'?' (通过另一个线程中的VBA代码)在前端和末尾。您可以使用此商品代码:11301-21

如果将以上内容粘贴到Excel中并查看其长度= LEN(),则可以更好地理解我的问题。

我需要一个很好的解决方案来解决这个问题。所以请帮忙!

非常感谢你。

2 个答案:

答案 0 :(得分:2)

感谢Gary's Student,因为他的回答激发了我的灵感。

此外,我使用this answer代码。

此函数将清除数据的每个字符,因此它应该适合您。您需要2个函数:1清除Unicode字符,另一个清理项目代码_

        Public Function CLEAN_ITEM_CODE(ByRef ThisCell As Range) As String
    If ThisCell.Count > 1 Or ThisCell.Count < 1 Then
        CLEAN_ITEM_CODE = "Only single cells allowed"
        Exit Function
    End If


    Dim ZZ As Byte

    For ZZ = 1 To Len(ThisCell.Value) Step 1
        CLEAN_ITEM_CODE = CLEAN_ITEM_CODE & GetStrippedText(Mid(ThisCell.Value, ZZ, 1))
    Next ZZ


    End Function

    Private Function GetStrippedText(txt As String) As String
If txt = "–" Then
    GetStrippedText = "–"
Else
    Dim regEx As Object

    Set regEx = CreateObject("vbscript.regexp")
    regEx.Pattern = "[^\u0000-\u007F]"
    GetStrippedText = regEx.Replace(txt, "")
End If

End Function

这就是我在Excel中使用它作为公式的原因。注意字符串Len的区别:

enter image description here

希望这有帮助

答案 1 :(得分:1)

你有外观的字符,就像空格字符一样,但不是。它们是UniCode 8236&amp; 8237。

只需用空格字符(ASCII 32)替换它们。

修改#1:

根据帖子中的字符串,以下VBA宏将用简单的空格字符替换UniCode字符8236 amd 8237:

Sub Kleanup()
Dim N1 As Long, N2 As Long
Dim Bad1 As String, Bad2 As String

N1 = 8237
Bad1 = ChrW(N1)
N2 = 8236
Bad2 = ChrW(N2)

Cells.Replace what:=Bad1, replacement:=" ", lookat:=xlPart
Cells.Replace what:=Bad2, replacement:=" ", lookat:=xlPart

End Sub