2016-10-12 4 views
0

Ich habe dynamische benannte Bereich der Zelle. Ich muss jeden benannten Bereich in eine Seite des Wortes einfügen und zur nächsten Seite für den nächsten benannten Bereich wechseln. Ich habe versucht, Code zu kopieren, was ich nicht kann.Jede benannte Bereichsdaten überlappen sich gegenseitig. Kann mir bitte jemand helfen?Excel VBA kopieren Einfügen jedes benannten Bereichs in Word

Antwort

2

Es klingt, als ob Sie jeden Bereich auf verschiedene Seiten kopieren möchten, also bin ich nicht sicher, warum Sie eine Union verwenden. Hier ist ein kurzes Beispiel für das Kopieren jedes benannten Bereichs "name" auf ein neues Blatt in einem Word-Dokument. Hinweis: Ich habe zur Vereinfachung ein neues Dokument erstellt.

Bearbeiten - Ich habe die Copy/Paste-Funktionalität der Daten an das Ende hinzugefügt. Formatierung und dergleichen hängt davon ab, was Sie haben oder wollen.

Sub main() 
    'Create new word document 
    Dim objWord As Object 
    Dim objDoc As Object 
    Set objWord = CreateObject("Word.Application") 
    objWord.Visible = True 
    Set objDoc = objWord.documents.Add() 

    Dim intCounter As Integer 
    Dim rtarget As Word.Range 
    Dim wbBook As Workbook 
    Set wbBook = ActiveWorkbook 

    'Loop Through names 
    For intCounter = 1 To wbBook.Names.Count 
     Debug.Print wbBook.Names(intCounter) 

     With objDoc 
      Set rtarget = .Range(.Content.End - 1, .Content.End - 1) 

      'Insert page break if not first page 
      If intCounter > 1 Then rtarget.insertbreak Type:=wdPageBreak 

      'Write name to new page of word document 
      rtarget.Text = wbBook.Names(intCounter).Name & vbCr 

      'Copy data from named range 
      Range(wbBook.Names(intCounter)).Copy 
      Set rtarget = .Range(.Content.End - 1, .Content.End - 1) 
      rtarget.Paste 
     End With 
    Next intCounter 
End Sub 

Excel

enter image description here

Resultierende Word-Dokument

enter image description here

+0

Vielen Dank für Ihre Antwort! Die Daten werden nicht angezeigt, stattdessen wird der Arbeitsblattbereich auf jeder Seite angezeigt (= GenForm! $ A $ 1: $ E $ 22, = GenForm! $ A $ 24: $ E $ 29 usw.). Irgendein anderer Grund dafür? – Manish

+0

Siehe Bearbeiten - Ich habe ein einfaches Kopieren/Einfügen der Daten hinzugefügt. Es war nicht klar aus deinem Code, dass du etwas anderes als die Reichweite haben wolltest, also habe ich das ursprünglich weggelassen. –

+0

Danke! Seine Arbeit – Manish

1

Ich glaube nicht, das ist die beste Lösung da draußen ist (wie ich don‘ t normalerweise mit Word VBA spielen) aber ich habe dies versucht, und es hat scheint zu funktionieren:

Sub AddNamedRangesToWordDoc() 

    Dim oWord As Word.Application 
    Dim oDoc As Word.Document 
    Dim intCount As Integer 
    Dim oRng As Range 
    Dim oSelection As Object 

    Set oWord = New Word.Application 
    Set oDoc = oWord.Documents.Add 
    oWord.Visible = True 

    For intCount = 1 To ActiveWorkbook.Names.Count 

     Set oRng = Range(ActiveWorkbook.Names(intCount).RefersToRange.Name.Name) 
     oRng.Copy 

     oDoc.ActiveWindow.Selection.PasteSpecial , , 0 
     Set oSelection = oWord.Selection 
     oSelection.InsertBreak (wdPageBreak) 

    Next 

    Set oSelection = Nothing 
    Set oRng = Nothing 
    Set oDoc = Nothing 
    Set oWord = Nothing 

End Sub 

HINWEIS: Ich erstelle ein neues Wort Anwendung. Möglicherweise müssen Sie prüfen, ob das Wort bereits geöffnet ist und wie Sie mit einem vorhandenen Word-Dokument umgehen möchten. Außerdem erstelle ich das Wort Objekt nicht. Ich habe Microsoft Word xx.x Object Library im Projekt referenziert, da ich es vorziehe, mit eingebauten Bibliotheken zu arbeiten. Außerdem setzt die Funktion voraus, dass Sie nur 1 Arbeitsblatt haben und alle Bereiche in diesem Arbeitsblatt sind

+0

Danke !. Es funktioniert – Manish

Verwandte Themen