这个代码将读取从文本文件的行:

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

我怎样才能使它先后从同一个文件中反复读取一行?我想,我应该在这里使用一个循环,对不对?我需要它在第一次迭代读取文件的第一行,在第二次迭代的第二行,第三个在第三和以此类推,直到所有的线都被读取。我该怎么办呢?

重要补充:我需要的代码由每行一个一个操作 - 不是一次全部

其他提示

如果您要使用内置的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

您可以添加一个参考*到Windows脚本宿主对象模型,它会帮助你的FileSystemObject对象,因为你可以然后说:

Dim fs As FileSystemObject
Dim f As TextStream

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

*在代码窗口中,选择工具,引用,并勾选你想要的库旁边的复选框。

我写了一个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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top