在VBA中使用Replace替换回车

在VBA中使用Replace替换回车,vba,excel,Vba,Excel,我对VBA比较陌生,想要完成一些非常简单的事情,但我不明白为什么这不起作用。我正在读取文件中的行,如果用notepad++打开,每行末尾都有一个CRLF。我只想删除CR。在notepad++中,我可以做一个replaceall,用LF替换CRLF,一切都很好。但是,我现在在VBA中进行的测试并没有正确地执行此操作。下面是我在Notepad++中处理的字符串示例: 我去公园散步 我想让绳子变成,小结——我去公园散步了 我正在写一个文件作为测试,以查看它是否工作。下面是我的代码: Do Wh

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

我去公园散步

我想让绳子变成,小结——我去公园散步了

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

    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结束,在这一点上也是朝着正确方向迈出的一步


谢谢。

您正在阅读一行,因此它将删除新行字符。您的replace语句与此无关。然后您将写一行,该行将添加新行字符

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

你会想要这样的东西:

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

 txtStream.Close
 stream.Close

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

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

你会想要这样的东西:

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

 txtStream.Close
 stream.Close
  • WriteLine会自动在字符串后放置一个行尾

  • 您应该用@Mark的建议替换它:
    stream.Write(edited)

  • 这样做的效果更好:

    stream.Write(替换(txtStream.ReadAll、vbCrLf、vbLf))

    stream.Write(替换(txtStream.ReadAll、vbCr、vbLf))

有关

  • WriteLine会自动在字符串后放置一个行尾

  • 您应该用@Mark的建议替换它:
    stream.Write(edited)

  • 这样做的效果更好:

    stream.Write(替换(txtStream.ReadAll、vbCrLf、vbLf))

    stream.Write(替换(txtStream.ReadAll、vbCr、vbLf))


有关

的详细信息非常感谢保罗。使用vbCr和vbCrLf常量有效!非常感谢你,保罗。使用vbCr和vbCrLf常量有效!