2009-06-02 194 views
15

我已經在Microsoft Office Word 2003中讀取了該文本文件的行中的此宏代碼。每行代表一個字符串值,我需要稍後在代碼中使用。從文本文件中讀取行但跳過前兩行

但是,文本文件的前兩行包含一些我不需要的東西。 如何修改代碼以便跳過兩條第一行?該「智能感知」在Word中VBA編輯器內吸硬順便說一句..

不管怎樣,代碼看起來像這樣

Dim sFileName As String 
Dim iFileNum As Integer 
Dim sBuf As String 
Dim Fields as String 

sFileName = "c:\fields.ini" 
''//Does the file exist? 
If Len(Dir$(sFileName)) = 0 Then 
    MsgBox ("Cannot find fields.ini") 
End If 

iFileNum = FreeFile() 
Open sFileName For Input As iFileNum 
Do While Not EOF(iFileNum) 
    Line Input #iFileNum, Fields 

    MsgBox (Fields) 

而這種代碼當前給我所有的線,我不想要前兩個。

回答

30

這整個Open <file path> For Input As <some number>事情是這樣。它也很慢並且非常容易出錯。

在您的VBA編輯器中,從工具菜單中選擇引用,然後查找「Microsoft腳本運行時」(scrrun.dll),它幾乎適用於任何XP或Vista計算機。它在那裏,選擇它。現在,你有機會獲得一個(至少對我來說),而更強大的解決方案:

With New Scripting.FileSystemObject 
    With .OpenTextFile(sFilename, ForReading) 

     If Not .AtEndOfStream Then .SkipLine 
     If Not .AtEndOfStream Then .SkipLine 

     Do Until .AtEndOfStream 
      DoSomethingImportantTo .ReadLine 
     Loop 

    End With 
End With 
2

可能是我過於簡單化了嗎?

只需添加以下代碼:

Open sFileName For Input as iFileNum 
Line Input #iFileNum, dummy1 
Line Input #iFileNum, dummy2 
........ 

孫大信

+0

您也想利用這些線路輸入 – 2009-06-02 10:47:18

+0

-1之前檢查EOF。如果文件的行數少於兩行,則會失敗 – Tomalak 2009-06-02 10:51:12

3
Open sFileName For Input As iFileNum 

Dim LineNum As Long 
LineNum = 0 

Do While Not EOF(iFileNum) 
    LineNum = LineNum + 1 
    Line Input #iFileNum, Fields 
    If LineNum > 2 Then 
    DoStuffWith(Fields) 
    End If 
Loop 
6

您可以使用隨機訪問。

Open "C:\docs\TESTFILE.txt" For Random As #1 

    Position = 3 ' Define record number. 
    Get #1, Position, ARecord ' Read record. 

Close #1 
1
Dim sFileName As String 
Dim iFileNum As Integer 
Dim sBuf As String 
Dim Fields as String 
Dim TempStr as String 

sFileName = "c:\fields.ini" 
''//Does the file exist? 
If Len(Dir$(sFileName)) = 0 Then 
    MsgBox ("Cannot find fields.ini") 
End If 

iFileNum = FreeFile() 
Open sFileName For Input As iFileNum 

''//This part skips the first two lines 
if not(EOF(iFileNum)) Then Line Input #iFilenum, TempStr 
if not(EOF(iFileNum)) Then Line Input #iFilenum, TempStr 

Do While Not EOF(iFileNum) 
    Line Input #iFileNum, Fields 

    MsgBox (Fields) 
Loop