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)

这段代码目前给了我所有的行,我不想要前两行。

4

5 回答 5

31

整个Open <file path> For Input As <some number>事情都是1990年代。它也很慢而且很容易出错。

在您的 VBA 编辑器中,从“工具”菜单中选择“引用”并查找“Microsoft Scripting Runtime”(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
于 2009-06-02T11:24:18.770 回答
6

You can use random access.

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

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

Close #1
于 2009-06-02T11:10:52.447 回答
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
于 2009-06-02T10:47:14.163 回答
2

可能是我过于简单化了?

只需添加以下代码:

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

桑达尔

于 2009-06-02T10:36:56.183 回答
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
于 2009-06-11T17:31:14.537 回答