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.
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:
Aber in Word 2010, der gleiche code produziert dieses Ergebnis:
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?
InformationsquelleAutor Gary McGill | 2013-09-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hoffe, ich habe verstanden Ihre Abfrage korrekt... Ist das nicht das, was Sie sind versuchen zu tun? Dieser code kopiert die Zeile 1 der Tabelle und erstellen Sie eine Kopie der Zeile darunter.
Screenshot
FOLLOWUP (Aus den Kommentaren)
Diesen code nicht verwenden, die
Selection
ObjektMEHR FOLLOWUP (Aus den Kommentaren)
Selection
Objekt. Ich habe Tausende Zeilen code, die bewusst vermeidet, das zu tun und ich bin nicht daran interessiert, machen hier eine Ausnahme. Es muss möglich sein, um das gleiche Ergebnis zu erzielen ohne?Yup, es ist möglich 🙂 Aktualisiert obigen post
Aaargh. Ich bin peinlich, sich zu beschweren wieder, aber ich will auch nicht die Zwischenablage verwendet werden. Ich hatte das in dem update oben in meiner Frage, aber ich vergaß auch, dass du es in meinem Kommentar. Sorry, ich habe Ihre Zeit verschwendet hier, zweimal, und ich demütig entschuldigen.
Keine Sorge. Sie helfen mir, denken Sie an verschiedenen Möglichkeiten 😉 Versuchen Sie, die oben genannten aktualisierten code
Ich würde Ihnen empfehlen, sich eine neue Frage mit einem link zu dieser Frage. Außerdem: die Struktur der Tabelle, die in Ihrer Frage. Und am wichtigsten ist, enthalten den code, der Sie versucht, um das Problem zu lösen. Wir werden dann nehmen Sie es von dort 🙂
InformationsquelleAutor Siddharth Rout
nicht differes seine Funktion, die es nützlich. es fügt Zeilen, nach Vorlage um
InformationsquelleAutor Shimon Doodkin