2009-06-02 115 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