schwazza89
Goto Top

VBA - Bereich von Excel nach Word kopieren

Hallo zusammen,

ich suche eine Möglichkeit einen Bereich aus Excel in eine Tabelle in Word zu kopieren.

Meinen ersten Versuch mit Hilfe von Textmarken findet ihr im Folgenden. Die erste Textmarke "strBMName1" ist die oberste Zelle der Spalte und die zweite Textmarke "strBMName2" ist die unterste Zelle der gleichen Spalte.

fkt_ReplaceBookmarkTextRange ActiveDocument, "SpalteOben", "SpalteUnten"  
 
Function fkt_ReplaceBookmarkTextRange(oDoc As Document, strBMName1 As String, strBMName2 As  _
String)
 
Dim rng1 As Range, rng2 As Range
Dim xlAppl As Object 'Excel.Application  
Dim xlWbk As Object  'Excel.Workbook  
Dim xlWks As Object  'Excel.Worksheet  
 
'Pfad anpassen  
strPathAndFile = "PFAD“  
Set xlAppl = CreateObject("Excel.Application")  
Set xlWbk = xlAppl.Workbooks.Open(FileName:=strPathAndFile)
xlAppl.Visible = False
 
Set xlWksTest = xlWbk.Worksheets("Test")  
 
If oDoc.Bookmarks.Exists(strBMName1) Then
    Set rng1 = oDoc.Bookmarks(strBMName1).Range
    Set rng2 = oDoc.Bookmarks(strBMName2).Range
    xlWksTest.Range("B175:B191").Copy 'Kopiervorgang der Spalte aus Excel  
    oDoc.Range(rng1.Start, rng2.End).Paste 'Einfügen in den Bereich im Word-Dokument  
    oDoc.Bookmarks.Add Name:=strBMName2, Range:=rng2
    Set rng1 = Nothing
    Set rng2 = Nothing
End If
End Function

Mit dieser Funktion wird der gewünschte Bereich kopiert und eingefügt, aber die Textmarke „strBMName2“ befindet sich nicht mehr an der gleichen Position, sondern im Word-Dokument in einer anderen Zelle.

Bin für jeden Vorschlag dankbar und mir irgendwie auch sicher, dass es bestimmt eine elegantere Lösung für mein Problem gibt.

Viele Grüße
schwazza

Content-Key: 349995

Url: https://administrator.de/contentid/349995

Printed on: April 26, 2024 at 00:04 o'clock

Mitglied: 133883
Solution 133883 Sep 25, 2017 at 06:51:16 (UTC)
Goto Top
Member: Pjordorf
Pjordorf Sep 25, 2017 at 06:52:34 (UTC)
Goto Top
Hallo,

Zitat von @schwazza89:
aber die Textmarke „strBMName2“ befindet sich nicht mehr an der gleichen Position, sondern im Word-Dokument in einer anderen Zelle.
Wenn du ja auch 175 Zellen (Zeilen) löscht kann in Word dann in deine Tabelle nicht mit 175 Anfangen. Da ist es dann die Nummer 1, oder was genau meinst du mit "nicht mehr an der gleichen Position"? Vielleicht hilft ein Bild(er) mit den markierten Unterschieden.

Gruß,
Peter
Member: schwazza89
schwazza89 Sep 25, 2017 updated at 07:09:21 (UTC)
Goto Top
@ Oneplus:
Danke für den Hinweis, aber ich benutze doch bereits Bereichs-Textmarken. Ich speichere eine Referenz des Range und lege auch nach dem Einfügen von Text in den Range erneut ein Bookmark über den Range via Code an. Oder verstehe ich deinen Hinweis falsch?

@Pjordorf
Die „strBMName1“ ist nach dem Kopiervorgang auch noch an der richtigen Position (1. Zeile, 2. Spalte), aber die Textmarke „strBMName2“ (ursprünglich in der letzten Zeile, 2. Spalte) befindet sich danach in der 1. Zeile, 1. Spalte.
Ich werde versuchen ein Bild zu ergänzen.

Mit einzelnen Zellen und Textmarken habe ich soweit keinerlei Probleme. Die Zellen werden wie gewünscht kopiert und die Textmarken bleiben auch nach dem Kopiervorgang bestehen. Lediglich das Kopieren eines Bereichs funktioniert leider nicht mehrere Male, da die zweite Textmarke verschoben wird. Ich könnte also jede Zelle einzeln ansprechen, aber würde das aufgrund der Größe der Tabelle gerne vermeiden.
Mitglied: 133883
133883 Sep 25, 2017 updated at 07:11:20 (UTC)
Goto Top
Oder verstehe ich deinen Hinweis falsch?
Jepp, schaus dir nochmal genau an.
Member: schwazza89
schwazza89 Sep 25, 2017 at 07:24:06 (UTC)
Goto Top
Ich schaue mir das später nochmal genauer an, da ich heute Nachmittag vermutlich erst länger dafür Zeit habe. Hatte gar nicht so schnell mit Antworten gerechnet. Vielen Dank schon mal dafür.

Was mir spontan auffällt, ist, dass ich eigentlich nur "strBMName2" neu einfüge
oDoc.Bookmarks.Add Name:=strBMName2, Range:=rng2

Komischerweise ist "strBMName1" nach dem Kopiervorgang aber noch an der richtigen Position und befindet sich dort, wo im Bild "0,3048" steht. Die andere Textmarke, die ich wieder einfüge, ist in der zweiten Zeile, 1. Spalte.
strbmname2_verschoben
Member: schwazza89
schwazza89 Sep 25, 2017 at 11:16:02 (UTC)
Goto Top
Ich habe es nun hinbekommen. Auch wenn ich mir nicht sicher bin, ob es das ist worauf mich Oneplus hinweisen wollte.
Da ich bislang noch nicht all zu viel mit Textmarken zu tun hatte, hab ich es komplizierter gemacht, als man es hätte machen müssen.

Statt zwei Textmarken reicht für den Bereich eine einzige Textmarke. Also eine Textmarke, die in meinem Fall bei "strBMName1" beginnt und bei "strBMName2" endet.

Das Einzige was ich noch nicht komplett verstehe ist, dass ich folgende Zeile im Code nicht benötige:
oDoc.Bookmarks.Add Name:=strBMName1, Range:=rng1

Ich hatte es so verstanden, dass die Textmarke dadurch wiederhergestellt wird. Allerdings bleibt die Textmarke auch ohne die Zeile an der gewünschten Position.

Vielen Dank für alle Vorschläge.

Viele Grüße
schwazza89