Word 2007 - Daten aus txt-Datei in Textbox einlesen

28/12/2009 - 14:06 von Claudia | Report spam
Liebe Word-Spezialisten,

damit es mir über die Feiertage nicht langweilig ist, habe ich mir
noch ein Projekt zugelegt. Nun habe ich hier ein paar Probleme bei der
Umsetzung.

Hintergrund:
Aus einer externen Datenbank (nicht MS) wird eine txt-Datei
exportiert, in der mehrere Projekte enthalten sind und die wie folgt
aufgebaut ist:
###Projekttitel
bla bla bla bla
###Ziel
bla bla bla bla
###Methode
bla bla bla bla
###Ergebnis
bla bla bla bla
########## - Ende Projekt1
danach folgt das nàchste Porjekt, das Ende wieder durch ##########
gekennzeichnet.

Ich habe nun eine Userform erstellt, mit links TextBox1 und rechts
TextBox2 und in der Mitte zwei Schaltflàchen mit >>> und <<<.

Ich möchte nun die txt-Datei in TextBox1 einlesen und zwar immer nur
den Projekttitel, so dass der Anwender alle Projekte in der Datei in
der TextBox1 sieht. Der Projekttitel kann eine oder auch mehrere
Zeilen lang sein.
Über die Schaltflàchen >>> und <<< soll der Anwender dann die Projekte
in der TextBox2 anordnen können, um die Reihenfolge festzulegen und
welche Projekte denn in den Word-Bericht übernommen werden sollen.
Mit OK werden dann die ausgewàhlten Projekte in eine vorgegebene Word-
Datei geschrieben.

Hier habe ich schon das erste Problem, die Daten werden nicht richtig
eingelesen, habe es mit zwei Methoden probiert:

Versuch 1:
Sub Einlesen1
Dim i As Integer
Dim projekt As String
Dim Titel As String, Ziel As String, Methode As String,
Ergebnis As String
i = 0
' Textdatei öffnen
Open MeineTextdatei For Input As #1
' Schleife bis zum Ende
Do While Not EOF(1)
i = i + 1
'einlesen
Input #1, Titel, Ziel, Methode, Ergebnis
projekt = Titel
Loop
'Datei schließen
Close #1
End SUB

Versuch 2 (aus der Hilfe):
Sub Einlesen2()
Dim Zeichen1
Open MeineTextdatei For Input As #1 ' Datei öffnen.
Do While Not EOF(1) ' Schleife bis Dateiende.
Zeichen1 = Input(' *******hier müsste der Titel ausgelesen
werden *****, #1)
projekt = Titel
Loop
Close #1
End Sub

Bei Versuch zwei gelingt es mir gar nicht, die Zeile nach ###Titel
richtig einzulesen, ich hatte es mit der InStr probiert (auslesen von
###Titel bis zum nàchsten ###), auch mit der StrComp-Funktion hat es
nicht funktioniert.

Kann mir jemand helfen? - Das wàre klasse - Danke im voraus.

Systemumgebung: WinXP SP3 und Office 2007 SP2

Ich habe hier in der Newsgroup auch schon rumgesucht, bin aber nicht
fündig geworden.

Vielen Dank und Grüße
Claudia
 

Lesen sie die antworten

#1 Wolfram Jahn
28/12/2009 - 21:45 | Warnen spam
Am 28.12.2009 14:06, schrieb Claudia:

Ich habe nun eine Userform erstellt, mit links TextBox1 und rechts
TextBox2 und in der Mitte zwei Schaltflàchen mit>>> und<<<.



Sind das harte Vorgaben, oder wàrest Du frei auch anders vorzugehen?
Mir scheint es, als würden die Vorgaben wie Du sie beschreibst besonders
gut dazu geeignet sein Dich unglücklich zu machen...

Z.B. habe ich eine entfernt àhnliche Aufgabe mal so gelöst, dass ich die
Quelle in einen TreeView mit Checkboxes eingelesen habe.

Da kann der Anwender dann den Tree auf- und zuklappen wie er es gerade
braucht und mit den Checkboxes làsst sich auch sehr gut auswàhlen, was
spàter übernommen werden soll und was nicht.

Die Reihenfolge kann man über Knöpfe mit Pfeil nach oben / Pfeil nach
unten noch beeinflussenm, die Knotensreihenfolge eines TreeView kann man
selber festlegen.

Wenn so eine Lösung eine Option ist, schreibe ich gerne ein bisschen
Code auf - nur ist das doch etwas mehr Arbeit als ein simples Beispiel,
deshalb frage ich erstmal, ob es überhaupt in Frage kommt.


Hier habe ich schon das erste Problem, die Daten werden nicht richtig
eingelesen,



Ach, das geht ganz einfach:

'''' Code:
Sub c()
Dim fso
Dim aProjekte, aTeile
Dim sProjekte, sProjekt
Dim sTeilName, sTeilText, sTeil

Set fso = CreateObject("Scripting.FileSystemObject")
sProjekte = fso.OpenTextFile("Projekte.txt").readall
aProjekte = Split(sProjekte, "##########")

For Each sProjekt In aProjekte
aTeile = Split(sProjekt, "###")

For i = 1 To UBound(aTeile)

sTeil = aTeile(i)
sTeilName = Split(sTeil, vbCrLf, 2)(0)
sTeilText = Replace(sTeil, sTeilName & vbCrLf, "")
sTeilText = Mid(sTeilText, 1, Len(sTeilText) - 2)
Debug.Print ""
Debug.Print "Teil: " & sTeilName
Debug.Print ""
Debug.Print "Text: " & sTeilText
Debug.Print ""

Next i

Next sProjekt

End Sub

'''' Eingabedatei:
###Projekttitel
bla bla bla bla Titel 1
###Ziel
bla bla bla bla Ziel 1
###Methode
bla bla bla bla Methode 1
###Ergebnis
bla bla bla bla Ergebnis 1
########## - Ende Projekt1
###Projekttitel
bla bla bla bla Titel 2
###Ziel
bla bla bla bla Ziel 2
###Methode
bla bla bla bla Methode 2
###Ergebnis
bla bla bla bla Ergebnis 2
########## - Ende Projekt1
###Projekttitel
bla bla bla bla Titel 3
###Ziel
bla bla bla bla Ziel 3
###Methode
bla bla bla bla Methode 3
###Ergebnis
bla bla bla bla Ergebnis 3
########## - Ende Projekt1
'''' Eingabedatei Ende gehört schon nicht mehr dazu

'''' Ausgabe im Direktbereich:

Teil: Projekttitel

Text: bla bla bla bla Titel 1


Teil: Ziel

Text: bla bla bla bla Ziel 1


Teil: Methode

Text: bla bla bla bla Methode 1


Teil: Ergebnis

Text: bla bla bla bla Ergebnis 1


Teil: Projekttitel

Text: bla bla bla bla Titel 2


Teil: Ziel

Text: bla bla bla bla Ziel 2


Teil: Methode

Text: bla bla bla bla Methode 2


Teil: Ergebnis

Ähnliche fragen