【问题标题】:How to replace properly text with new line sign in text file using VBA?如何使用 VBA 在文本文件中用换行符正确替换文本?
【发布时间】:2014-11-07 16:42:28
【问题描述】:

我正在尝试替换一些文本,包括换行符,但是它不起作用。正在使用 Chr(10)、Chr(13) 和 Chr(10)+Chr(13) 组合。没有工作。有任何想法吗?代码如下:

Sub Replacetext()

 Dim MyFolder As String
 Dim MyFile As String
 Dim Fname As String


 MyFolder = "D:\Excel" 
 MyFile = Dir(MyFolder & "\*.txt")

 Do While MyFile <> ""
 Fname = MyFolder & "\" & MyFile
 Workbooks.OpenText Fname

 Cells.Replace What:="a" & Chr(13) & "a", Replacement:="b" & Chr(13) & "b" _
    SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False, lookat:=xlWhole

 ActiveWorkbook.Close savechanges:=1
 MyFile = Dir
 Loop
End Sub

【问题讨论】:

  • 为什么不使用vbCrLf?这应该与 dos 格式文件上的新行匹配。您的文本文件来自 Unix 系统吗?
  • 不起作用。文本文件是在 Windows 操作系统中手动创建的。
  • 还有一个问题是,当我尝试用包含换行符的文本替换没有换行符的文本时,我会得到额外的“”

标签: vba text replace line-breaks


【解决方案1】:

简答

您要查找的 ANSI 代码只是 10

更长的答案

好的,也许这会对您有所帮助。我在这样的单元格中创建了多行数据:

This is
Multiline

"A1"。然后我想看看空白的代码是什么。

Public Sub ToAnsi()
    Dim strCellData As String
    strCellData = Range("A1").Value

    For i = 1 To Len(strCellData)
        MsgBox Asc(Mid$(strCellData, i, 1))
    Next
End Sub

从某种意义上说并不优雅,但我们从 MsgBox 中得到了答案。我能够确定换行符空格代码是10。这对我来说是一个惊喜。我的测试是在 Excel 2010 上进行的。

更新

我注意到您在Cells.replace 的第一行缺少一个尾随逗号。所以应该是:

Cells.Replace What:="a" & Chr(13) & "a", Replacement:="b" & Chr(13) & "b", _

还请考虑以下数据。第一行包含多行数据。

     A           B          C
1    This is     a
     Multiline   a  
2

如果我用我的 ANSI 数字对我的工作表运行你的代码,甚至用类似的数据编辑单元格 C1

Range("C1").Value = "c" & Chr(10) & "c"
Cells.Replace What:="a" & Chr(10) & "a", Replacement:="b" & Chr(10) & "b", _
    SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False, lookat:=xlWhole

     A           B          C
1    This is     b          c
     Multiline   b          c   
2

如果它不适合您,我认为您需要更多调试或更多信息。如果 "cells" 的格式不是最好的,这里还有一张图片。

【讨论】:

  • 我将针对多行单元格测试您的代码。我将在换行符后用 a 替换 a 。根据我更新的答案检查您的语法。虽然我怀疑这是你的最终问题。此外,您应该尝试分解您的一个细胞,就像我进行测试一样。
  • 是的,它适用于您描述的情况。但是现在我看到我的问题在于加载文本文件。如何在一个单元格而不是多个单元格中加载文本文件。
  • 使用 ReadAll 将文件作为文本流读取,然后您可以将其放入单元格中。喜欢here。如果您对此有疑问,请提出一个新问题。
猜你喜欢
  • 2013-10-22
  • 2015-09-22
  • 1970-01-01
  • 1970-01-01
  • 2015-05-16
  • 2022-09-23
  • 2014-01-01
  • 1970-01-01
  • 2022-01-08
相关资源
最近更新 更多