Excel文件包含无法删除的无效隐藏字符

时间:2015-04-01 12:52:00

标签: excel vba excel-vba

我在使用VBA创建文本文件的Excel电子表格中隐藏字符存在一个特殊问题。我已经附加了文件测试版的链接,我会尽力解释这个问题。

该文件创建一个普通的txt文件,可用于将数据提供给我们使用的系统。它运行正常,但是我们已经提供了大约15,000行数据,并且在整个地方随机点都有隐藏的字符。

在测试文件中,有1行,它的单元格B11在值的开头和结尾有隐藏字符。如果你把光标放在它的末尾,然后按退格键,它看起来好像什么也没发生,但实际上你刚刚删除了其中一个字符。

就Excel而言,那些隐藏的字符是问号,但它们不是,因为文本流会解析那些,但它不会,而是抛出无效的过程调用错误。

我尝试过使用Excel的CLEAN公式,我尝试过VBA等价物,尝试使用'替换'但似乎没有人认出这些字符。 Excel确信它们只是问号,即使ASCII字符调用给我相同的答案(63),但是替换不会将它们替换为问号,它只是省略了它们!

对此有任何帮助,即使它只是我可以申请的公式,我们将不胜感激。为了数据保护的利益,文件中的数据是假的,它不是真正的NI编号。

The excel file with vba code is here

1 个答案:

答案 0 :(得分:1)

此VBA宏可以单独运行,也可以与ClearFormatting宏一起运行。它确实剥离了样本中的流氓unichars。

Sub strip_Rogue_Unichars()
    Dim uc As Long
    With Cells(11, 1).CurrentRegion
        For uc = 8000 To 8390
            .Replace what:=ChrW(uc), replacement:=vbNullString, lookat:=xlPart
            DoEvents
        Next uc
    End With
End Sub

可能有更好的方法来实现这一点,并且能够限制Unicode字符的范围以进行搜索和替换显然会加快速度。关闭.EnableEvents.ScreenUpdating等也会有所帮助。我相信计算已经在手动了。我故意在循环中留下一个DoEvents,因为我的第一次运行是数千种不同的unichars。