使用VBA中的替换替换CarriageReturn

时间:2015-06-25 03:24:43

标签: excel vba excel-vba

我对VBA比较陌生,想要完成一些非常简单的事情,但是为什么这不起作用我很困惑。我正在从文件中读取行,如果在notepad ++中打开,则每行最后都有一个CRLF。我想删除CR。在notepad ++中,我可以做一个替换,用LF替换CRLF,事情很好。但是,我现在在VBA中进行的测试并没有正确执行此操作。下面是我在Notepad ++中处理的字符串示例:

总结 - 我去了parkCRLF散步

我希望字符串成为,摘要 - 我去了parkLF散步

我正在写一个文件作为测试,以查看它是否正常工作。以下是我的代码:

    Do While Not txtStream.AtEndOfStream

    str = txtStream.ReadLine
    edited = Replace(str, Chr(13) & Chr(10), Chr(10))
    stream.WriteLine (edited)

Loop

txtStream.Close

代码正在执行而没有错误,但CRLF仍然在新编写的文件中的每一行的末尾...也许我显然遗漏了一些东西,但替换似乎没有找到我的'我正在寻找。对此有任何帮助或建议将不胜感激!

即使确定线的末端是否以CRLF结束,此时也是朝着正确方向迈出的一步。

谢谢。

2 个答案:

答案 0 :(得分:3)

您正在读取一行,因此它将删除换行符。你的替换语句无关。然后你写了一行将添加新的行字符。

此外,您没有关闭您提供的代码示例中的输出流。

你会想要这样的东西:

 Do While Not txtStream.AtEndOfStream
      str = txtStream.ReadLine
      stream.Write str & Chr(10)
 Loop

 txtStream.Close
 stream.Close

答案 1 :(得分:3)

  • WriteLine会自动在字符串

  • 后面放置一行
  • 您应该将其替换为@ Mark的建议:stream.Write(edited)

  • 这样做效果更好:

    stream.Write(Replace(txtStream.ReadAll, vbCrLf, vbLf))

    stream.Write(Replace(txtStream.ReadAll, vbCr, vbLf))

有关ReadAll

的详细信息