Wie kann ich duplizieren Sie eine Zeile in einer Word-Tabelle?

Ich bin versucht zu duplizieren einer Tabellenzeile in Word mit VBA, ohne mit dem Selection-Objekt oder die Zwischenablage. Das heißt, ich möchte eine neue Zeile, die den gleichen Inhalt hat wie eine bestehende Zeile.

Um dies zu tun, muss ich zuerst erstellen Sie eine neue (leere) Zeile und Schleife über jede Zelle in der source-Zeile und kopieren Sie den Inhalt in der entsprechenden Zelle in der Ziel-Zeile.

Kopieren jede Zelle, bekomme ich eine Range - Objekt, das Referenzen der gesamte Inhalt der Quell-Zelle, und eine äquivalente Range für die Zielzelle, und dann dies tun:

oToRange.FormattedText = oFromRange.FormattedText

Dies funktioniert auch unter Office 2003, und das funktioniert auch die meiste Zeit auf Office 2010. Allerdings habe ich ein echtes problem mit einem bestimmten Szenario. Ich habe (stark) vereinfacht, dass Szenario zu zeigen, der Kern des Problems.

In der Abbildung unten, es sind zwei Zellen in der äußeren (Grau) 2R x 1C Tisch. Die zweite Zeile ist die Zeile kopiert werden. Die erste Zeile ist die neue Zeile die ich erstellt habe, und in die ich will, um zu kopieren Sie den Inhalt der zweiten Zeile.

Wie kann ich duplizieren Sie eine Zeile in einer Word-Tabelle?

Werden Sie feststellen, dass die zweite Zeile enthält eine geschachtelte Tabelle.

Wenn ich den folgenden code in Word 2003, es funktioniert perfekt, und ich erhalte das folgende Ergebnis:

Wie kann ich duplizieren Sie eine Zeile in einer Word-Tabelle?

Aber in Word 2010, der gleiche code produziert dieses Ergebnis:

Wie kann ich duplizieren Sie eine Zeile in einer Word-Tabelle?

Wie Sie sehen können, den Inhalt der Zelle eingefügt wurde vor (und außerhalb) der Zieltabelle Zelle.

Es ist erwähnenswert, dass, wenn ich etwas nach der geschachtelten Tabelle, so dass es nicht mehr das Letzte, was in der Quell-Zelle, dann tritt dieses problem nicht auf.

Hier der komplette VBA-code, den ich verwende:

Dim oDoc As Word.Document
Set oDoc = ThisDocument

Dim oFromRange As Range
Set oFromRange = ThisDocument.Tables(1).Cell(2, 1).Range
oFromRange.End = oFromRange.End - 1

Dim oToRange As Range
Set oToRange = ThisDocument.Tables(1).Cell(1, 1).Range
oToRange.End = oToRange.End - 1

oToRange.FormattedText = oFromRange.FormattedText

HINWEIS: die Anpassung an das Ende der Quell-und Ziel-Bereiche ist notwendig, da Cell.Range umfasst die end-of-Zell-marker, und ich möchte nicht kopieren.

Was kann ich tun, um zu überzeugen, um den Inhalt innen der target-Zelle (wie Word 2003 tut), anstatt davor?

+ 1 für ein gut erklärt Frage 🙂

InformationsquelleAutor Gary McGill | 2013-09-12

Schreibe einen Kommentar