2015-10-14 73 views
0

所以我想在一個工作簿中寫一些代碼,它將使用VBA在某個文件路徑中打開一個文件,找到存在於具有特定行號的行中的數據,然後在給定該行號的情況下覆蓋那些行。我知道「打開文件輸入/輸出/追加」功能,但「輸入」只讀,「輸出」覆蓋我的文件中的所有數據,「追加」只添加數據到文件的末尾。我一直堅持一段時間,真的可以使用一些幫助。這是我目前的代碼段:如何在VBA的特定行中編輯當前存在的.csv文件?

Open Filepath For Output As #2 
    ExternalRowCount = 0 ' Row number where I want to start writing data. 
    ArrayRef = 0 ' Array Index for data 

    Do Until EOF(1) 
     ExternalRowCount = ExternalRowCount + 1 
     If ExternalRowCount >= Found And ExternalRowCount < (Found + 100) Then ' looping through rows to get to my desired location ("Found" is my desired row number) 
      CellData = arr1(ArrayRef) 
      CellDataTwo = arr2(ArrayRef) 
      Write #2, CellData, CellDataTwo 
      ArrayRef = ArrayRef + 1 
     End If 
    Loop 
Close #2 

任何幫助將不勝感激!謝謝

+0

在'EOF引用的文件是什麼(1)'?你從哪裏讀取文件中的數據? –

+0

通常不能更新文本文件,因爲新記錄的長度與舊記錄的長度不同。通常的做法是從文件A循環讀取記錄並將更改的記錄寫入文件B.文件B可以具有新的版本號或文件A可以用後綴「Old」重命名,而文件B重命名爲文件A的原始名稱。 –

回答

0

這將在Test.csv更新線2

Option Explicit 

Public Sub updateCSVLine() 
    Dim fName As String, fso As Object, fsoFile As Object, txt As Variant 

    Set fso = CreateObject("Scripting.FileSystemObject") 

    Set fsoFile = fso.OpenTextFile("C:\Test.csv", 1) 
    txt = fsoFile.ReadAll 
    fsoFile.Close 

    txt = Split(txt, vbNewLine) 

    txt(2 - 1) = ".. valX, .. valY, .. valZ" 

    Set fsoFile = fso.OpenTextFile("C:\Test.csv", 2) 
    fsoFile.Write Join(txt, vbNewLine) 
    fsoFile.Close 
End Sub 

前:

l1 val1, l1 val2, l1 val3 
l2 val1, l2 val2, l2 val3 
l3 val1, l3 val2, l3 val3 

後:

l1 val1, l1 val2, l1 val3 
.. valX, .. valY, .. valZ 
l3 val1, l3 val2, l3 val3