Wie Zeilen aus einer Textdatei nacheinander mit Power-Point-VBA-Code lesen?
-
19-09-2019 - |
Frage
Dieser Code wird eine Zeile aus einer Textdatei lesen:
set file = CreateObject("Scripting.FileSystemObject").OpenTextFile("c:\number.txt", 1)
text = file.ReadLine
MsgBox text
Wie kann ich es liest immer wieder eine Zeile nach dem anderen aus der gleichen Datei? Ich denke, ich sollte eine Schleife verwenden hier, nicht wahr? Ich brauche es die erste Zeile aus der Datei bei der ersten Iteration zu lesen, die zweite Zeile in der zweiten Iteration, die dritte an der dritten und so weiter, bis alle Zeilen gelesen wurden. Wie kann ich es tun?
Wichtiger Zusatz: Ich brauche den Code in jeder Zeile ein zu betreiben, indem man - nicht alle auf einmal
!Lösung
Verwenden Sie die ReadAll()
Methode:
text = file.ReadAll
(könnte von Interesse sein: Filesystembeispielcode )
Mit einer Schleife:
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
Andere Tipps
Wenn Sie aus irgendeinem Grund den eingebauten VBA-Datei Behandlungsroutinen verwenden möchten, würden Sie folgenden Code verwenden:
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
Sie können eine Referenz * an dem Host Object Model Windows Script hinzufügen, wird es Ihnen mit dem Objekt Filesystem helfen, denn man kann dann sagen:
Dim fs As FileSystemObject
Dim f As TextStream
die es Ihnen erlaubt Intellisense zu verwenden, um die verschiedenen Eigenschaften und den Objektkatalog finden Sie in der Bibliothek zu erkunden.
* im Code-Fenster, wählen Sie Extras, Hinweise und markieren Sie das Kästchen neben der Bibliothek, die Sie wollen.
Ich schrieb eine VBA-Routine, die für jeden Satz in dem Text eine Textdatei und legen Sie eine neue Folie liest.
Zuerst in Dia # 1, fügen Sie eine Schaltfläche, die das Makro mit dem Namen "erzeugen"
ruftDer Quellcode geht:
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
Datei herunterladen: http://konahn.tistory.com/attachment/cfile8.uf@2175154C573D3BC02A2DFA.pptm