PDA

Vollständige Version anzeigen : Word mehrere Tabellen einfügen, Automation


Patrick123
27.07.2009, 18:29
Hallo,

ich versuche in Word Tabellen einzufügen. Die Tabellen sollen nacheinander (am besten ohne Umbruch) eingefügt werden.

Eine Tabelle funktioniert perfekt. Ab der 2. Tabelle verstehe ich nicht wie ich die Selection (Selection.Range) hinter die 1. Tabelle verschieben kann.

wordApp.Selection.Table.Add(...) fügt die neue Tabelle immer nur in die vorherige Tabelle ein. Dort kann ich zur not noch die Zelle wählen.

Weiss jemand wie das funktionieren kann oder wo ich ein Beispiel finde?

Das Problem müsste auch bei Bildern oder anderen Objekten auftreten.

Für jede Hilfe dankbar.

Gruß

Patrick

Hotte
28.07.2009, 00:30
Hi,

viele Wege führen nach Rom.... schau es Dir mal an.

Arbeitest Du aus einem anderen Officeprogramm - wegen des Objektes "wordApp" - dann müsstest Du das Objekt vor dem Selection setzen.

Sub Tabellen_einfuegen()

Dim i As Long

With Selection
For i = 1 To 3
.Tables.Add .Range, (6 + i), (2 + i)
.Tables(1).Select
.MoveDown 5, 1 '5 = wdLine
Next i

End With

End Sub


Fügt nacheinander 3 Tabellen ein - erhöht jeweils die Spalten- und Zeilenanzahl

Patrick123
28.07.2009, 09:38
Hallo,

vielen dank für die schnelle Antwort. Ich erstelle das Word-Dokument aus einer .Net-Applikation.

Das oben genannte Beispiel fügt nach ersten Tests die neue Tabelle an die vorherige. Es bleibt also immer eine Tabelle.

Ich versuche die Tabellen hintereinander einzufügen, vielleicht noch mit zwischenräumen.

Alle Tabellen haben einen unterschiedlichen aufbau. Wenn ich jetzt mit einer foreach columns logik durchgehe kommt es zu einer fehlermeldung.

Ich hab ansatzweise gelesen das mit einem range-objekt gearbeitet werden kann. vielleicht weisst du da ja auch noch ein beispiel, würde mich freuen.

meine experimente führen immer ins nirvana :entsetzt:

vielen dank für die hilfe

patrick

peppi
28.07.2009, 09:50
Hallo Patrick,

ich weiß nicht, ob es damit zusammenhängt, aber wenn man "zu Fuß" Tabellen einfügt, muß man immer noch zusätzlich einen Absatz unter der Tabelle einfügen, da Word sonst nicht erkennt, daß eine neue Tabelle eingefügt werden soll. Das Absatzendezeichen, welches unter der Tabelle ist, gehört nämlich zu dieser. Platziert man also den Cursor genau in diesem Absatz, wird die neu hinzuzufügende Tabelle als Bestandteil der bereits bestehenden gesehen und dort einfach angehängt...

Aber wie gesagt, ich weiß nicht, ob das auch einen Einfluß hat, wenn man das Ganze per vba macht. Dazu kann Hotte sicherlich mehr sagen...
<br>

Hotte
28.07.2009, 10:13
Hi,

wei Peppi sagt - dann musst Du einen Absatz zwix´schen die Tabellen setzen:

Sub Tabellen_einfuegen()

Dim i As Long

With Selection
For i = 1 To 3
.Tables.Add .Range, (6 + i), (2 + i)
.Tables(1).Select
.MoveDown 5, 1 '5 = wdLine
.TypeParagraph
Next i

End With

End Sub


Aber Du woltest ja alle direkt aneinander haben - dann fügt Word dies eirgendwie schon zusammen... nur mit dem Absatz sidn es einzelne Tabellen.
Dann kannst Du die dann auch entsprechend durchlaufen ohne Fehlermeldung.

Patrick123
28.07.2009, 10:20
Hi,

irgendwas hat das mit den Absätzen zu tun. Leider komm ich nicht ganz hinter diese move methode und hab irgendwie zuviele möglichkeiten mit dem range object (selection.range, document.range, etc..) und komme nicht genau da hin wo ich möchte.

eine lösung habe ich jetzt gefunden die funktioniert.

ich füge zuerst so viele absätze in das dokument wie ich brauche, merke mir die absätze in eier Liste (weil die Tabelle neue absätze ins dokument einbringt), dann iteriere ich über die absätze und füge die tabellen direkt in die absätze.

keine so schöne lösung, vielleicght geht das auch einfacher...

vielen dank auf jeden fall, bin weiter gekommen

patrick

Hotte
28.07.2009, 10:33
Hallo,

also ich verstehe nicht, warum Du es nict so machst. Du musst ja praktisch nur den mittleren Teil meienr Schleife für eine Tabelle benutzen. Dann ist es doch alles klar.

Ich weiß nicht, was Du wie im Dokument "zusammensetzt". Wenn Du die Stellen vorher weißt, wo die Tabellen hinkommen sollen - dann setzt doch Textmarken gleich an die Stellen. Dann ist es noch einfacher.

Das Range-Objekt ist ja gut und schön .. nur damit verschiebst Du nicht den Cursor. Das ist ja auch gewollt.

Also so ist mir nicht wirklich klar, was passieren soll....:rolleyes: