2015-04-01 136 views
0

我有一个使用VBA创建文本文件的Excel电子表格中隐藏字符的特殊问题。我附加了一个链接到文件的测试版本,我会尽我所能解释这个问题。Excel文件包含无法删除的无效隐藏字符

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

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

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

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

对此的任何帮助,即使它只是一个我可以适用的公式,将不胜感激。为了保护数据,文件中的数据是虚假的,它并不是真正的NI编号。

The excel file with vba code is here

+0

看起来你有Unicode 8236&8237在那里。这些流氓角色是受限于这些人还是他们遍布全球? – Jeeped 2015-04-01 13:00:59

+0

据我可以告诉他们只是在那个特定的列,但可能有成千上万的单元格类似于那里 – 2015-04-01 13:08:06

+0

@Donkey Kong - 我只是想要删除这些字符来停止无效的过程调用,肯定是替换通配符不会删除它们?或者我错过了什么? – 2015-04-01 13:09:00

回答

1

这VBA宏可以自行或与ClearFormatting宏一起运行。它确实从样本中去除了流氓单身者。

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,因为我的第一次运行是几千个不同的单身人士。

+0

非常感谢,它做到了,我现在设法摆脱它们。 – 2015-04-01 14:18:28