从 VBA 读取和写入文本文件,EOF() 迭代仅在 10% 的时间内有效

问题描述

我试图编写一个文件来重写文本文件的第 27 行。但是 EOF(1) 似乎只在 10% 的时间内起作用。其他时候它只是直接在第一个循环中运行,并且不返回任何内容。有人知道原因吗?

Dim File As String

Dim VecFile() As String,Aux As String
Dim i As Long,j As Long
Dim SizeNewFile As Long

Open (filepath) For Input As 1
i = 0
j = 0
Do Until EOF(1)
    j = j + 1
    Line Input #1,Aux
    If j <> 27 Then
        i = i + 1
        ReDim Preserve VecFile(1 To i)
        VecFile(i) = Aux
    End If
Loop
Close #1
SizeNewFile = i

'Write array to file
Open ("filepath") For Output As 1
For i = 1 To 26
    Print #1,VecFile(i)
Next i

Print #1,"\newcommand\casenumber{" & Sheets("Database").Range("$B$1").Value & "}" & Chr(13) & Chr(10)
For i = 28 To SizeNewFile
    Print #1,VecFile(i)
Next i

Close #1

我收到运行时错误 9,下标超出范围。

解决方法

试试这样的:

Sub Tester()

    Const FILE_PATH As String = "C:\Tester\Modify Me.txt"
    
    Dim arr,txt
    
    With CreateObject("scripting.filesystemobject")
        
        txt = .opentextfile(FILE_PATH,1).readall()  'read all content
        arr = Split(txt,vbCrLf)                     'zero-based array from file content
        'modify content if reached required # of lines
        If UBound(arr) >= 26 Then arr(26) = "---New line goes here---" 
  
        
        txt = Join(arr,vbCrLf)
        .opentextfile(FILE_PATH,2,True).write txt  'write back modified text
    
    End With
    
End Sub