4

此代码将从文本文件中读取一行:

set file = CreateObject("Scripting.FileSystemObject").OpenTextFile("c:\number.txt", 1)
text = file.ReadLine
MsgBox text

如何让它从同一个文件中逐行重复读取?我想,我应该在这里使用一个循环,对吧?我需要它在第一次迭代时从文件中读取第一行,在第二次迭代时读取第二行,在第三次迭代时读取第三行,依此类推,直到所有行都被读取。我该怎么做?

重要补充:我需要代码逐行操作 - 不是一次全部!

4

4 回答 4

8

使用ReadAll()方法:

text = file.ReadAll

(可能感兴趣:FileSystemObject 示例代码

有一个循环:

Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim fso, MyFile, FileName, TextLine

Set fso = CreateObject("Scripting.FileSystemObject")

FileName = "c:\testfile.txt"

Set MyFile = fso.OpenTextFile(FileName, ForReading)

'' Read from the file
Do While MyFile.AtEndOfStream <> True
    TextLine = MyFile.ReadLine

    '' Do stuff to TextLine

Loop
MyFile.Close
于 2009-11-12T01:44:58.307 回答
2

如果出于某种原因您想使用内置的 VBA 文件处理例程,您可以使用如下代码:

Sub ReadAFileLineByLine()
    Dim InStream As Integer
    InStream = FreeFile()
    Open "C:/tmp/fastsynchtoquesttry_quest.txt" For Input As InStream

    Dim CurrLine As String
    Do While True
        Line Input #InStream, CurrLine
        ' do stuff to CurrLine
        If EOF(InStream) Then Exit Do
    Loop

    Close #InStream
End Sub
于 2009-11-12T14:55:06.660 回答
0

您可以添加对 Windows 脚本宿主对象模型的引用*,它将帮助您使用 FileSystemObject 对象,因为您可以说:

Dim fs As FileSystemObject
Dim f As TextStream

这将允许您使用智能感知来查看各种属性和对象浏览器来探索库。

* 在代码窗口中,选择工具、参考并勾选您想要的库旁边的框。

于 2009-11-12T01:48:08.147 回答
-1

我编写了一个 VBA 例程,它读取一个文本文件并为文本中的每个句子插入一张新幻灯片。

首先,在幻灯片 #1 中,添加一个按钮,调用名为“生成”的宏

源代码如下:

Const DEFAULT_SLIDE = 1 ' the slide to copy the layout style from
Const MARGIN = 50       ' margin of the generated textbox

Sub generate()
    Dim txtFile As String   ' text file name
    Dim fileNo As Integer   ' file handle
    Dim buffer As String    ' temporary string buffer
    Dim sentence() As String    ' the main array to save sentences
    Dim i, total As Integer
    Dim myLayout As CustomLayout
    Dim mySlide As Slide
    Dim myShape As Shape
    Dim myWidth, myHeight As Integer    'slide width and height


    txtFile = "text2sample.txt"
    txtFile = ActivePresentation.Path & "\" & txtFile   'textfile should be in the same Dir as this ppt

    If Len(Dir$(txtFile)) = 0 Then
        MsgBox txtFile & " file not found."
        Exit Sub
    End If

    'Initialize array
    ReDim sentence(0)

    'get file handle number
    fileNo = FreeFile()
    Open txtFile For Input As #fileNo

    i = 0
    Do While Not EOF(fileNo)
        Line Input #fileNo, buffer  'read & save sentences line by line
        ReDim Preserve sentence(i + 1)  ' increase 1 more array
        sentence(i) = LTrim(RTrim(buffer))
        i = i + 1
    Loop
    Close #fileNo

    total = i
    Randomize   ' for random color

    With ActivePresentation.PageSetup
        myWidth = .SlideWidth - MARGIN  'get width and height
        myHeight = .SlideHeight - MARGIN
    End With

    For i = 0 To total
        Set myLayout = ActivePresentation.Slides(DEFAULT_SLIDE).CustomLayout
        'add a slide like slide #1
        Set mySlide = ActivePresentation.Slides.AddSlide(DEFAULT_SLIDE + 1 + i, myLayout)
        'add a textbox with margin
        Set myShape = ActivePresentation.Slides(DEFAULT_SLIDE + 1 + i).Shapes. _
        AddTextbox(msoTextOrientationHorizontal, MARGIN, MARGIN, myWidth, myHeight)
        With myShape
            'add a sentence
            .TextFrame.TextRange.Text = sentence(i)
            .TextFrame.TextRange.Font.Size = 60
            ' color 255 is too bright. Pick a less bright color (200)
            .TextFrame.TextRange.Font.Color.RGB = RGB(Int(Rnd * 200), Int(Rnd * 200), Int(Rnd * 200))
            .TextFrame.TextRange.Font.Bold = msoTrue
            .TextFrame.TextRange.Font.Shadow = msoTrue
            ' If you want to change the color of the shape
            '.Fill.ForeColor.RGB = RGB(Int(Rnd * 200), Int(Rnd * 200), Int(Rnd * 200))
            '.Fill.BackColor.RGB = RGB(Int(Rnd * 200), Int(Rnd * 200), Int(Rnd * 200))
            '.Fill.Solid
        End With
        'add a textbox for slideshow progress ex) 1/100
        Set myShape = ActivePresentation.Slides(DEFAULT_SLIDE + 1 + i).Shapes. _
        AddTextbox(msoTextOrientationHorizontal, 0, 0, 150, 20)
        With myShape
            .TextFrame.TextRange.Text = "( " & i & " /" & total & " )"
            .TextFrame.TextRange.Font.Size = 20
            .TextFrame.TextRange.Font.Color.RGB = RGB(100, 100, 100)
        End With
    Next

    MsgBox total & " Slides were added.", vbInformation

End Sub

下载文件: http: //konahn.tistory.com/attachment/cfile8.uf@2175154C573D3BC02A2DFA.pptm

于 2016-05-19T04:30:48.267 回答