steve: txt & Word

hey Leute...guten morgen!

Ich hab in Word ein Dokument erstellt, wo einige Formulare drinnen sind.
Jetzt benötige ich aber noch ein Script, dass die Formulardaten von einem txt file Zeile für Zeile ausliest und in jedes Formular eine Zeile einfügt.

z.B:
Word Dokument
Name: [Formular1]
Firma: [Formular2]

txt file
Daniel Danzinger
Welser Profile AG

und nachdem ich das Script aufgerufen habe sollte dann folgendes im Word Dokument drinnenstehen:
Name: Daniel Danzinger
Firma: Welser Profile AG

Habt ihr Vorschläge wie ich das realisieren kann?

mfg danzi

  1. Hello,

    Habt ihr Vorschläge wie ich das realisieren kann?

    von wem soll denn die Aktion ausgehen? Soll das aus dem Word Dokument heraus geschehen? Dann hilft ein kleines VBA-Makro, das den Datei-Öffnen Dialog anzeigt, die Textdatei öffnet und anschließend über das Dokument die Formularlarfelder sucht und befüllt. Vorteil: Du hast guten Zugriff auf das Dokument.
    Soll die Aktion von außen kommen, müsstest du etwas genauer beschreiben, wie denn das ganze eigentlich aussehen soll.

    MfG
    Rouven

    --
    -------------------
    He is entertaining both out of the car and in the car because if you tell him that a corner is almost flat then he is the guy who is going to try to take it flat even if it means shunting it the other side of it, he will come with the data and say 'hey, I may have crashed and destroyed the car, but I was flat-out'. That is an interesting quality that he has!  --  Team Member on Jacques Villeneuve
    1. Es sollte ein Script sein, dass jede Zeile aus dem txt file ausliest und dann in word in das Textfeld einfügt. Dabei sollte die erste Zeile des .txt Dokument in das erste Textfeld des Worddokument eingefügt werden usw.

      Mit Formulare hab ich folgendes gemeint:
      einfache Textfelder, der Rest des Dokuments ist schreibgeschützt und kann man nicht ändern.

      ich hoffe du kennst dich aus

      mfg steve

      1. Hi,

        Rouven hat dich doch bereits darauf hingewiesen, dass du die gewünschte Funktionalität durch ein "Makro" (eine Funktion in VBA in Word geschrieben) lösen kannst. Hast du das bereits versucht, wenn ja, was hat nicht funktioniert?

        Was du mit "Formular" meinst, sind nur "Formular"-Felder.

        Ciao, Frank

        1. Komischerweise kann ich bei einem schreibgeschützten Dokument keine Makros definieren.

          Kann ich das umgehen?

          mfg

          1. Soweit mir bekannt ist, muss der VBA Code nicht im selben Dokument untergebracht sein. Word speichert den Makrocode dann ggf in einem eigenen anderen Dokument.

            Frank

            1. hmmm...okay

              ich hab mit VBA noch nie was gemacht.
              kennt ihr vl eine seite wo ich VBA erlernen kann.

              und wie importiere ich eine Zeile von einer txt-Datei in ein bestimmtes Textformularfeld.

              Wäre super wenn ihr mir das vl ein wenig erklären könntet

              mfg steve

              1. Hello,

                und wie importiere ich eine Zeile von einer txt-Datei in ein bestimmtes Textformularfeld.

                wo du am Besten den Einstieg in VBA finden kannst, kann ich dir gerade nicht sagen. Aber Jörg Lorenz hat zahlreiche hilfreiche Beispiele zusammen getragen, vielleicht ist was für dich dabei.

                MfG
                Rouven

                --
                -------------------
                Buy when there's blood running in the street and sell when everyone is pounding at your door, clawing to own your equities  --  Wisdom on Wallstreet
                1. ich hab jetzt nen Algorithmus gefunden, der mir Zeile für Zeile aus einer Texdatei auslest (hoffe er stimmt auch^^):

                  Sub AutoExec()
                  '
                  ' Declarationen.AutoExec Makro
                  ' Makro erstellt am 27.07.2007 von Ferialpraktikant SIA2
                  '
                  i = 0
                  Open "DATEINAME" For Input As #1    ' Datei zum Einlesen öffnen.
                  Do While Not EOF(1)    ' Auf Dateiende abfragen.
                    If i > 1 Then
                      'hier in das Formular schreiben
                    End If
                    Line Input #1, Dateidaten    ' Datenzeilen lesen.
                    i = i + 1
                  Loop
                  Close #1    ' Datei schließen.

                  End Sub

                  Nur jetzt steh ich wieder vor dem Problem wie ich die Zeilen in die einzelnen Textformularfelder einfüge!

                  Ich hab gegoogelt, aber nichts dazu gefunden...
                  Habt ihr Profis vl eine Lösung?

                  mfg steve

                  1. Kann man die Felder vl über die Textmarken ansprechen?

                    mfg

                    1. Hello,

                      Kann man die Felder vl über die Textmarken ansprechen?

                      ich glaub du musst dich noch etwas mehr im Googlen üben, das hier war nicht so schwer zu finden.

                      MfG
                      Rouven

                      --
                      -------------------
                      Unser Problem ist, dass wir eine Demokratie entwickelt haben, was nicht immer der richtige Weg ist  --  Bernie Ecclestone zu den lästigen Diskussionen um Regeländerungen in der Formel 1
                      1. Danke für eure Antworten!
                        Ich hab jetzt mit eurer Hilfe einen Code gebastelt der sogar funktioniert. Nur weiß ich nicht, wie man eine Zahl zu einem String hinzufügt?!
                        weiß das wer von euch?

                        So sieht dann der Code aus:

                        Sub AutoExec()
                        '
                        ' Declarationen.AutoExec Makro
                        ' Makro erstellt am 27.07.2007 von Ferialpraktikant SIA2
                        '
                        i = 0
                        Open "C:/Daten.txt" For Input As #1    ' Datei zum Einlesen öffnen.
                        Do While Not EOF(1)    ' Auf Dateiende abfragen.
                          If i > 1 Then
                            'hier in das Formular schreiben
                            ActiveDocument.FormFields("Text" mit Variable i verknüpfen).Result = Dateidaten

                        End If
                          Line Input #1, Dateidaten    ' Datenzeilen lesen.
                          i = i + 1
                        Loop
                        Close #1    ' Datei schließen.

                        End Sub

                        mfg

                        1. das mitn String und Zahl verknüpfen funst jetzt.

                          Irgendwas hats aber noch mit der Schleife, wenn ich die weggeb funktioniert es, dass ich eine Zeile einfüge, doch wenn ich die Schleife lasse und die Zeilen nacheinander einfügen will tut das Programm nichts?! Seht ihr vl einen Fehler bei der Schleife?

                          Danke nochmals für eure super Antworten!

                          mfg steve

                          1. ok auch geklärt!

                            Wenn wen der Algorithmus interessiert:

                            Sub AutoExec()
                            '
                            ' Declarationen.AutoExec Makro
                            ' Makro erstellt am 27.07.2007 von Ferialpraktikant SIA2
                            '
                            Dim i As Integer
                            Dim Text As String
                            i = 1
                            Open "C:/Daten.txt" For Input As #1    ' Datei zum Einlesen öffnen.

                            Do While Not EOF(1)    ' Auf Dateiende abfragen.
                                Line Input #1, Dateidaten    ' Datenzeilen lesen.
                                Text = "Text" & CStr(i)
                                'hier in das Formular schreiben
                                ActiveDocument.FormFields(Text).Result = Dateidaten
                                i = i + 1
                             Loop

                            Close #1    ' Datei schließen.

                            End Sub

                            PS: die Textmarker lauten Text1, Text2,...

                            LG steve

                            1. sry eine Frage hab ich noch:

                              Ich würde gerne den Code abspeichern und nur durch doppelklicken auf die Code-Datei automatisch das Programm ausführen(aus txt datei lesen, in Formulare schreiben), ohne dass man Word und anschließend den Editor aufrufen muss.

                              Geht das irgendwie?

                              mfg steve

                              1. Hi,

                                Ich würde gerne den Code abspeichern und nur durch doppelklicken auf die Code-Datei automatisch das Programm ausführen(aus txt datei lesen, in Formulare schreiben), ohne dass man Word und anschließend den Editor aufrufen muss.

                                Geht das irgendwie?

                                ja, das geht, ist aber schon etwas mehr Aufwand. Ob es mit VBS geht, weiß ich jetzt nicht, aber zum Beispiel mit VB. Die Reihenfolge wäre ungefähr so:

                                • Prüfen, ob Word offen ist
                                    - Nein: Word öffnen => Word als Anwendung in Objektvariable
                                    - Ja: Word als Anwendung in Objektvariable
                                • Worddatei öffnen (geht auch visible = false, so dass man nichts davon mitbekommt)
                                • Textdatei auslesen
                                • Inhalte in Formularfelder
                                • Textdatei schließen
                                • Worddatei drucken, speichern, schließen, usw.
                                • Word auf den vorherigen Zustand zurücksetzen
                                • Objektvariable zerstören

                                In der Aufzählung fehlen nun noch die Errorhandler, die umso wichtiger sind, wenn das Ganze mit Word.Visible = false ausgeführt wird. Sonst kann es passieren, dass Word im Speicher bleibt, man damit aber nichts mehr anfangen kann.

                                Einfacher würde ich es finden, wenn Du im VBA-Editor auf Dein Dokument doppelt klickst und dann eine Document_Open-Ereignisroutine erstellst:

                                Private Sub Document_Open()

                                End Sub

                                Dann wird der Code ausgeführt, wenn das Dokument geöffnet wird - was ja im Prinzip auch nichts weiter ist, als ein Doppelklick auf eine Datei.

                                Viele Grüße

                                Jörg

                                1. ok...danke für die Antwort

                                  mfg

                        2. Hi,

                          kleiner Tipp:

                          Do While Not EOF(1)    ' Auf Dateiende abfragen.
                            If i > 1 Then
                              'hier in das Formular schreiben
                              ActiveDocument.FormFields("Text" mit Variable i verknüpfen).Result = Dateidaten

                          End If
                            Line Input #1, Dateidaten    ' Datenzeilen lesen.
                            i = i + 1
                          Loop

                          Sieh Dir mal die Reihenfolge an. ;-)
                          Erst schreibst Du in das Feld, dann liest Du aus der Datei …

                          Viele Grüße

                          Jörg

                  2. Hi,

                    ich hab jetzt nen Algorithmus gefunden, der mir Zeile für Zeile aus einer Texdatei auslest (hoffe er stimmt auch^^):

                    auf den ersten Blick ja.

                    Nur jetzt steh ich wieder vor dem Problem wie ich die Zeilen in die einzelnen Textformularfelder einfüge!

                    Du kannst in Wort auch mal ein Makro aufzeichnen, indem Du einfach in vorhandene Formularfelder etwas eingibst. Das aufgezeichnete Makro siehst Du Dir dann an und übernimmst den relevanten Code in Deine andere Routine.

                    Viele Grüße

                    Jörg

  2. Hi,

    Habt ihr Vorschläge wie ich das realisieren kann?

    Ich weiss nicht, ob es dir bei deinem konkreten Problem weiterhilft, aber Word hat eine Serienbrief-Funktion.
    Damit kannst du Daten aus Dateien einbinden. Ob das mit deiner Datei auch geht weiss ich nicht, da ich das ganze bis jetzt nur im Zusammenhang mit csv-Dateien benutzt habe, die aber im Prinzip auch nur Text-Dateien sind.

    mfG,
    steckl