Vba 文件系统对象

Vba 文件系统对象,vba,Vba,当我在csv文件上尝试它时,它工作得很好,但后来我遇到了一个问题。其中一个文件的第一行是A、B、C、D,没有引号,第二个文件的第一行是 2014年7月1日,RBC BASELII 2014年7月1日 现在,当我尝试删除第二个文件的第一行时,整个文件文本都会被删除,而它在第一个文件中一次只删除一行。请帮帮我 希望这些评论能解释发生了什么 Sub Command3_Click() Dim fs As FileSystemObject Dim f As TextStream

当我在csv文件上尝试它时,它工作得很好,但后来我遇到了一个问题。其中一个文件的第一行是A、B、C、D,没有引号,第二个文件的第一行是 2014年7月1日,RBC BASELII 2014年7月1日


现在,当我尝试删除第二个文件的第一行时,整个文件文本都会被删除,而它在第一个文件中一次只删除一行。请帮帮我

希望这些评论能解释发生了什么

Sub Command3_Click()
      Dim fs As FileSystemObject
      Dim f As TextStream
      Dim a As Variant
      Dim i As Long

      Set fs = CreateObject("Scripting.FileSystemObject")

      ' Read file into array
       If fs.FileExists("C:\rbc.csv") Then
           Set f = fs.OpenTextFile("C:\rbc.csv", ForReading, False)
           a = Split(f.ReadAll, vbNewLine, -1, vbTextCompare)
           f.Close
       Else
           MsgBox "The file path is invalid.", vbCritical, vbNullString
           Exit Sub
       End If
      ' Write line > 1 to file
      Set f = fs.OpenTextFile("C:\rbc.csv", ForWriting, True)
      For i = 1 To UBound(a)
        f.WriteLine a(i)
      Next
      f.Close
End Sub  

我猜第二个文件没有回车,所以如果你考虑VBeNeLink除法器,整个文件就是一个大行。编写另一个过程,打开第二个文件并查找第一个chr10,然后查看下一个字符是否为chr13。如果不是,则必须在chr10上拆分,而不是在vbNewLine上拆分,后者既是chr10又是chr13。但这会给同时使用这两种方法的文件带来一个小问题,因此您必须处理它。但我发现,如果我打开文件并按ctrl+s并关闭它,然后尝试使用该程序。那么问题出在哪里呢?无论你用什么程序打开文件,都会把换行符转换成Chr10Chr13换行符。如果我创建一个带有vbCr换行符的文件并在记事本中打开它,则所有内容都在同一行上。如果我在写字板中打开它,保存它而不做任何更改,然后在记事本中重新打开它,它有两行。例如,写字板将用Chr10Chr13替换任何回车符。这些文件来自linux系统吗?不,它们来自windows。所以我想你已经找到了解决办法。让我知道我该怎么做。谢谢
Sub Command3_Click()
    Dim fs As FileSystemObject
    Dim f As TextStream
    Dim a As Variant
    Dim i As Long
    Dim sLineBreak As String
    Dim sAll As String

    Const sFILE As String = "K:\rbc.csv"

    Set fs = CreateObject("Scripting.FileSystemObject")

    If fs.FileExists(sFILE) Then
        Set f = fs.OpenTextFile(sFILE, ForReading, False)
        sAll = f.ReadAll
        'if there are cr's, then it's either only cr's or it's both
        If InStr(1, sAll, vbCr) > 0 Then
            a = Split(sAll, vbCr, -1, vbTextCompare)
        Else 'no cr's means it's only line feeds
            a = Split(sAll, vbLf, -1, vbTextCompare)
        End If

        f.Close
    Else
        MsgBox "The file path is invalid.", vbCritical, vbNullString
        Exit Sub
    End If

    ' Write line > 1 to file
    Set f = fs.OpenTextFile(sFILE, ForWriting, True)
    For i = 1 To UBound(a)
        'if there are cr's, then we split on them, so they wouldn't
        'be there anymore. But if it was both, there would be
        'vblf's left over and we want to get rid of those
        f.WriteLine Replace(a(i), vbLf, vbNullString)
    Next
    f.Close
End Sub