PDA

Vollständige Version anzeigen : textmarken von Excel ausfüllen


TomT
26.05.2008, 22:56
HAllo,
ich habe mit VBA in Excel ein Userform gebaut das DAten wie Name Vorname speichert und mit einem Anderen Klopf in Word übergibt. Das geht auch alles wunderbar! Doch leider kann das Worddokument jeden übergebenen Wert nur einmal in eine Textmarke Einfügen.
Ich möchte aber die Felder wie zum Beispiel „Nachname“ öfter in dem Worddokument abbilden. Dafür habe ich eigentlich die Funktion REF [Nachname] genommen aber es geht nicht.

Muss ich vieleicht was anderes als eine Textmarke nehmen??????

Hotte
26.05.2008, 23:28
Hi,

was sind es denn für Textmarken....?

Grundsätzlich für jede "Stelle" im Dokument/Vorlage eine Textmarke. Soll also z.B. ein Wert zweimal eingefügt werden, so brauchst Du auch 2 Textmarken mit unterschiedlichen Namen... Das ist bestimmt erstmal der sicherste Weg....

TomT
27.05.2008, 09:10
Wie was für Textmarken?
ich möchte ja nur das der Zelleninhalt von der Exeltab. in Word übergerben wird. mir ist es ja egal ob man Textmarken oder andere Funktionen benutzt funktionieren muss es und wenn ich 20mal den Nachnamen einfügen muss, sollte es doch eine elegantere Möglichkeit geben

peppi
27.05.2008, 09:18
Hallo,

Du schreibst, daß {REF Nachname} nicht geht. Wie hast Du das denn eingegeben? Denn das funktioniert normalerweise sehr gut. Man muß allerdings die geschweiften Klammern mit der Tastenkombination Strg + F9 eingeben, und anschließend u.U. mit Alt + F9 die Ansicht | Feldfunktion wieder schließen...

Hotte
27.05.2008, 09:27
Hi,

Doch leider kann das Worddokument jeden übergebenen Wert nur einmal in eine Textmarke Einfügen.

Also was hast Du denn in Word nun an den Stellen? einfache Textmarken - geschlossene Textmarken, Textformularfelder ... oder ...

Das mit der Referenz funktiuoniert nicht mit allen Textmarken so einfach...

Wenn Du Code hast, dann solltest Du hier den Teil mal posten.

Ich sehe keine Problem, mit VBA auch 100-mal z.B. den Namen einzufügen...

TomT
27.05.2008, 10:00
Über Einfügen->Textmarke erstelle ich diese und füge sie hinzu.
die REF Felder mache ich über Einfügen->Feld...

und übergeben tuh ich so:
Private Sub Erstellen_Click()

Dim objWordApp As Object
Dim objWord As Object
Dim blnBraucheWord As Boolean
Dim sDirectory As String
On Error Resume Next
Set objWordApp = GetObject(, "Word.Application")
If Err.Number <> 0 Then
Err.Clear
On Error GoTo 0
blnBraucheWord = True
End If
If blnBraucheWord Then Set objWordApp = CreateObject("Word.Application")
objWordApp.Visible = True

'-------------------------------------------------
sDirectory = "d:\test.doc"
'-------------------------------------------------

Set objWord = objWordApp.Documents.Open(sDirectory)
With objWord

.Bookmarks("Anrede").Range.Text = For_Main.TextBox1.Value
.Bookmarks("Vorname").Range.Text = For_Main.TextBox2.Value
.Bookmarks("Nachname").Range.Text = For_Main.TextBox3.Value

Hotte
27.05.2008, 10:07
Hi,

das sit eine einfache Textmarke - und die bezeichnet in Word praktishc ienen Punkt - da kan ndas mit Ref nicht funktionieren... Den nwoher soll Word wissen, was alles zur Textmarke gehört???

Aber ich sehe eigentlich nicht so ein großes Problem (bis auf das Anlegen in Word selbst) z.B. die Textmarke "Nachname" mehrmals anzulegen - z.B. Nachname1, Nachname2, Nachname3 ....

Dann machst Du das über eine Schleife:

For i = 1 To 20
.Bookmarks("Nachname" & i).Range.Text = For_Main.TextBox3.Value
Next i

Das ist doch eigentlich dann nicht mehr so schlimm...

TomT
29.05.2008, 09:48
Danke Hotte

so hat es auch funktioniert blos habe ich jetzt die Textmarken durch Textformularfelder getauscht. nun sieht man wenigsens genauer so die stehen.
es ist zwar noch müssiger die einzufügen, aber naja.

Was kann ich den machen wenn bei den 45 nachnamensfeldern eins irgendwo in der mitte fehlt?
gibt es da eineProgrammzeile die einfach "weiter" sagt?

Hotte
29.05.2008, 12:12
Hi,

wenn es weiter Textmarken sind kannst du abfragen, ob es die Textmarke gibt:

If .Bookmarks.Exists("Nachname" & i) Then
.....
End If

oder Du machst es mit

On Error Resume Next

Dann läuft der Code bei einem Fehler einfach weiter und führt die Fehlerzeile nicht aus....

TomT
29.05.2008, 13:20
Dann müsste es ja auch so gehen
If .formFields.Exists("Nachname" & i) Then
For i = 1 To 45
objWord.FormFields("Nachname" & i).Range.Text = main.TextBox3.Value
Next i
end if

der code On Error Resume Next würde doch die ganze for next schleife beenden und alle anderen marken die nach der fehlenden kommen nicht ausfüllen, glaub ich.

auf jeden fall erstmal DANKE

Hotte
29.05.2008, 15:21
Hi,

mit Formfields geht das mit dem Exists so nicht...

Und nein - da wird nicht die gesamte Schleife beendet - sondern immer nur konkret die Fehlerzeile - der Befehl selbst. Also dann z.B: nur für die Zahl 20 - davor und danach wird wieder ausgeführt....