Office: (Office 2007) Word Datei in excel via VBA einfügen

Helfe beim Thema Word Datei in excel via VBA einfügen in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo liebe Community :) Ich bin seit einigen Wochen dabei Dokumente über Excel mit VBA zu erstellen. Ich habe schön öfters hier nach Codestücken... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von Potatas, 18. August 2015.

  1. Potatas Neuer User

    Word Datei in excel via VBA einfügen


    Hallo liebe Community :)

    Ich bin seit einigen Wochen dabei Dokumente über Excel mit VBA zu erstellen. Ich habe schön öfters hier nach Codestücken oder ähnlichem gesucht, wenn ich mit meinen Anfängerkenntnissen nicht mehr weiter wusste und bisher bin ich auch meisten fündig geworden. Nun steh ich jedoch vor Problemen zu denen ich keine passende Lösung gefunden haben.

    Was mein Code tun soll:

    Über ein Commandbutton startet eine Userform in dieser ich Dateipfad und Name einer Word Datei eingeben.
    Mit diesen Daten öffnet der Code die Worddatei, markiert und kopiert automatisch die erste Seite. Diese Markierung soll anschließend im Excel als Worddokument eingefügt werden. Danach wird die zweite Seite in meinem Worddatei ausgewählt, ebenfalls kopiert und wieder im Excel eingefügt. Das ganz wird so lange wiederholt bis alle Seiten kopiert wurden.

    Mein Code um das ganze zu realisieren sieht folgendermaßen aus:

    Code:
    Dim Seite As Integer                        'Variable für Seitenzahl
    Dim WD As Object                            'Objekt Variable für Worddatei
    
    
    Seite = 0                                    'Initalisieren der Seitenzahl
    Worksheets("FAT_Word").Visible = True        'Excel Tabelle einbelnden
    
    Set WD = CreateObject("Word.Application")    'Word als Object starten
    WD.Visible = True
    WD.Documents.Open "" & FAT_Word_Dateien.TextBox1.Value & "" & FAT_Word_Dateien.TextBox2.Value       'Word Datei öffnen
    
    
    
    Seite = WD.activedocument.ComputeStatistics(wdStatisticPages)       'Anzahl der Seiten im Word Dokument bestimmen
    
    
    For i = 1 To Seite                                          'Alle Seiten einzeln kopieren
    
    WD.Selection.Goto What:=wdGoToPage, Which:=wdGoToNext, Name:=i     'Auf entsprechende Seite springen
    WD.activedocument.Bookmarks("\Page").Range.Copy                    'Ausgewählt Seite kopieren
       
    Worksheets("FAT_Word").Select
    Worksheets("FAT_Word").Range("A" & i + (i - 1) * 50).Select        'Excel Zelle auswählen in die kopiert werden soll
    ActiveSheet.PasteSpecial Format:="Microsoft Office Word-Dokument-Objekt", _
            Link:=False, DisplayAsIcon:=False                          ' Auswahl als Word Dokument einfügen
    Next i
    
    
    WD.activedocument.Close                                     'Word Datei wieder schließen
    FAT_Word_Dateien.Hide                                       'Userform wieder schließen
    
    
    Was bisher überhaupt nicht funktioniert ist erstmal diese Anweisung:
    Code:
    Seite = WD.activedocument.ComputeStatistics(wdStatisticPages)       'Anzahl der Seiten im Word Dokument bestimmen
    
    Hier wird nicht die Seitenzahl, sondern die ZEICHENzahl bestimmt. Habe es mit verschiedenen Datei getestet immer das selbe, ich bekomme in meine Variable "Seite" immer die Anzahl der Zeichen geschrieben. Warum Word Datei in excel via VBA einfügen :confused:

    Das nächste Probleme ist diese Anweisung:
    Code:
    WD.Selection.Goto What:=wdGoToPage, Which:=wdGoToNext, Name:=i     'Auf entsprechende Seite springen
    
    Obwohl ich ihn ja eigentlich sage er soll auf die nächste Seite gehen bleibt er immer auf der ersten Seite. Das bedeutet wenn mein Dokument aus 3 Seiten besteht, kopiert er mir 3 mal die erste Seite. Wo liegt hier der Fehler Word Datei in excel via VBA einfügen :confused:Word Datei in excel via VBA einfügen :confused:

    Ich hoffe jemand kann mir weiter helfen? :)
     
    Potatas, 18. August 2015
    #1
  2. Exl121150 Erfahrener User
    Hallo,

    nachfolgend habe ich deinen VBA-Code entsprechend modifiziert, sodass er funktioniert.

    Das Hauptproblem bei deinem Code war, dass du nicht unterschieden hast zwischen
    1) einer Word-Applikationsinstanz (von mir als "WA" bezeichnet) und
    2) dem Worddokument (von mir als "WD" bezeichnet).

    Darüber hinaus habe ich ohnehin im Code auf die Probleme hingewiesen, die entstehen, wenn man aus einem Word-Dokument seitenorientiert nach Excel einliest.
    Weiters habe ich einen Backslash hinzugefügt bei der Pfadangabe (zwischen den beiden TextBoxen) - diesen musst du natürlich an deine tatsächlichen Verhältnisse in den TextBoxen anpassen, falls nötig.

    Die 3 #-Zeichen im Code müssen so bleiben, es sei denn, du entfernst die entsprechenden nicht passenden Codeteile (oder kommentierst sie aus). Sie stellen Compileranweisungen dar: Durch sie wird eine bedingte Kompilierung gesteuert.


    Code:
    Option Explicit
    
    #Const EARLY_BINDING = False
    
    Sub Einlesen_WordDok()
    
      #If EARLY_BINDING Then                         'falls Early-Binding-Methode:
         Dim WA As New Word.Application
         Dim WD As Word.Document
         Dim Pg As Word.Range, PgN As Word.Range
      #Else                                         'falls Late-Binding-Methode:
         Dim WA As Object                             'Objekt Variable für Wordapplikation
         Dim WD As Object                             'Objekt Variable für Worddokument
         Set WA = CreateObject("Word.Application")    'Word als Object starten
         Dim Pg As Object, PgN As Object
      #End If
      
      Dim Seiten As Integer                        'Variable für Seitenzahl
      Dim i As Integer
      Dim Rg As Excel.Range
      
      Worksheets("FAT_Word").Visible = True        'Excel Tabelle einbelnden
      WA.Visible = True
      'Word Datei öffnen
      With FAT_Word_Dateien
        Set WD = WA.Documents.Open(Filename:=.TextBox1.Value & "\" & .TextBox2.Value)
      End With
      
      Seiten = WD.ComputeStatistics(wdStatisticPages)       'Anzahl der Seiten im Word Dokument bestimmen
      
      For i = 1 To Seiten                                   'Alle Seiten einzeln kopieren
        If True Then
          'Favorisierte Variante:
          WA.Selection.Goto what:=wdGoToPage, Which:=wdGoToNext, Name:=i
          Set Pg = WD.Bookmarks("\Page").Range
        Else
          'Alternative Variante:
          Set Pg = WD.Goto(what:=wdGoToPage, Which:=wdGoToAbsolute, Count:=i)
          If i = Seiten Then
            Pg.End = WD.Content.End
          Else
            Set PgN = WD.Goto(what:=wdGoToPage, Which:=wdGoToAbsolute, Count:=i + 1)
            Pg.End = PgN.Start - 1
          End If
          'Beide Varianten sind gleich schlecht: Manchmal wird der letzte Absatzumbruch
          'einer Seite vergessen - bzw. manchmal wird die Formatierung der letzten Zeilen
          'verändert.
        End If
        Pg.Copy
        Set Rg = Worksheets("FAT_Word").Range("A" & i + (i - 1) * 50)      'Excel Zelle auswählen in die kopiert werden soll
        DoEvents
        Rg.PasteSpecial Paste:=xlPasteAll
          
      Next i
      
      WD.Close    'Word-Dokumenten-Datei wieder schließen
      WA.Quit     'Word-Applikation beenden
    End Sub
    
     
    Zuletzt bearbeitet: 18. August 2015
    Exl121150, 18. August 2015
    #2
  3. Potatas Neuer User
    Hi Exl,

    Danke erstmals für deine Hilfe.
    Ich kann nachvollziehen wie du zwischen einem Word Dokument und einer Applikation unterschieden hast.
    Was es mit dem Compileranweisungen auf sich hat ist mir aber nicht so bewusst, daher hab ich es einfach so mit den # übernommen.
    das Code sieht angepasst nun folgendermaßen aus, dabei hab ich mich für die 1. Variante entschieden:

    Code:
    Option Explicit
    
    #Const EARLY_BINDING = False
    
    Private Sub CommandButton1_Click()
    
      #If EARLY_BINDING Then                          'falls Early-Binding-Methode:
         Dim WA As New word.Application
         Dim WD As word.Document
         Dim Pg As word.Range, PgN As word.Range
      #Else                                           'falls Late-Binding-Methode:
         Dim WA As Object                             'Objekt Variable für Wordapplikation
         Dim WD As Object                             'Objekt Variable für Worddokument
         Set WA = CreateObject("Word.Application")    'Word als Object starten
         Dim Pg As Object, PgN As Object
      #End If
      
      Dim Seiten As Integer                           'Variable für Seitenzahl
      Dim i As Integer
      Dim Rg As Excel.Range
      
      
      Worksheets("FAT_Word").Visible = True           'Excel Tabelle einbelnden
      WA.Visible = True
      
      'Word Datei öffnen
      With FAT_Word_Dateien
        Set WD = WA.Documents.Open(Filename:=.TextBox1.Value & "\" & .TextBox2.Value)
      End With
      
      Seiten = WD.ComputeStatistics(wdStatisticPages)       'Anzahl der Seiten im Word Dokument bestimmen
      
        For i = 1 To Seiten                                   'Alle Seiten einzeln kopieren
        WA.Selection.Goto what:=wdGoToPage, Which:=wdGoToNext, Name:=i
        Set Pg = WD.Bookmarks("\Page").Range
        Pg.Copy
        Set Rg = Worksheets("FAT_Word").Range("A" & i + (i - 1) * 50)      'Excel Zelle auswählen in die kopiert werden soll
        DoEvents
        Rg.PasteSpecial Paste:=xlPasteAll
          
      Next i
      
      WD.Close    'Word-Dokumenten-Datei wieder schließen
      WA.Quit     'Word-Applikation beenden
    
    
    End Sub
    
    
    Dummerweise erkennt er die Wordbefehle nun nicht mehr.
    Sprich bei den Anweisungen: wdStatisticPages, wdGoToPage,.. bringt er die Fehlermeldung:
    Fehler beim kompilieren!
    Variable nicht definiert

    Die Excel Hilfe schreibt dazu folgenden:
    Sie haben mit einer Option Explicit-Anweisung festgelegt, dass Variablen explizit deklariert werden müssen, aber trotzdem eine nicht deklarierte Variable verwendet.
    Deklarieren Sie die Variable explizit, oder korrigieren Sie deren Schreibweise so, dass sie mit der gewünschten Variablen übereinstimmt.

    Vermutlich muss ich diese befehle im Excel nochmal deklarieren?! Wenn ja als was ?
     
    Zuletzt bearbeitet: 19. August 2015
    Potatas, 19. August 2015
    #3
  4. Exl121150 Erfahrener User

    Word Datei in excel via VBA einfügen

    Hallo,

    das war leider mein Fehler. Ich hatte beim Erstellen/Abändern des Makros die Compileranweisung
    #Const EARLY_BINDING = True
    eingestellt, weil sich damit sehr viel bequemer arbeiten lässt. Allerdings setzt das voraus, dass in Excel die Word-Library, in der die ganzen Methoden und Eigenschaften der Word-Applikation enthalten sind, für VBA verfügbar sein muss. Um dies zu erreichen, muss man
    im Menü des VBA-Editors > Tabulator "Extras" > Befehl "Verweise..." > Dialogfenster "Verweise - VBAProjekt" > Liste "Verfügbare Verweise"
    vor dem Listeneintrag "Microsoft Word xx.x Object Library" ein Häkchen setzen.
    Genau dann kennt auch der Excel-VBA-Editor und Compiler automatisch die folgenden Konstanten:
    Const wdStatisticPages = 2
    Const wdGoToPage = 1
    Const wdGoToNext = 2
    Nach getaner Arbeit stellte ich die Compileranweisung
    #Const EARLY_BINDING = False
    um, was bewirkt, dass man die (vorhin geschilderte) Word-Library-Einbindung nicht benötigt, weil zur Laufzeit des Programmes die folgende Anweisung
    Set WA = CreateObject("Word.Application")
    das Word-Applikationsobjekt erzeugt. Leider geschieht dies erst zur Laufzeit des Programmes und nicht bereits zum Kompilierungszeitpunkt des VBA-Codes. Dadurch kennt auch der Compiler die diversen Konstantenbezeichner nicht. Da zum Glück am Modulanfang die Compileroption
    Option Explicit
    enthalten ist, mahnt der Compiler die fehlenden Konstantendefinitionen an. Ohne dieser Option würde der Compiler vorerst nicht viel unternehmen, er würde vermutlich allen 3 Konstanten den Wert 0 zuweisen. Es ist dann nur eine Frage der Zeit, bis irgendwo zur Laufzeit des Programmes ein merkwürdiges Verhalten zum Tragen kommt.

    Aufgrund meines Fehlers und meiner obigen Schilderung dürfte sich dir auch erschließen, was es mit den Compileranweisungen auf sich hat: Durch diese Anweisungen kann man dem Compiler mitteilen, welche Teile des Programmes er kompilieren soll und welche nicht.

    Im nachfolgenden VBA-Code habe ich dir die 3 fehlenden Konstanten eingefügt, sodass jetzt auch der Compiler zufrieden sein müsste.


    Code:
    Option Explicit
    
    #Const EARLY_BINDING = False
    
    Private Sub CommandButton1_Click()
    
      #If EARLY_BINDING Then                          'falls Early-Binding-Methode:
         Dim WA As New Word.Application
         Dim WD As Word.Document
         Dim Pg As Word.Range, PgN As Word.Range
      #Else                                           'falls Late-Binding-Methode:
         Dim WA As Object                             'Objekt Variable für Wordapplikation
         Dim WD As Object                             'Objekt Variable für Worddokument
         Set WA = CreateObject("Word.Application")    'Word als Object starten
         Dim Pg As Object, PgN As Object
         Const wdStatisticPages = 2                   'Diese Konstantendefinition hat gefehlt.
         Const wdGoToPage = 1                         'Diese Konstantendefinition hat gefehlt.
         Const wdGoToNext = 2                         'Diese Konstantendefinition hat gefehlt.
      #End If
      
      Dim Seiten As Integer                           'Variable für Seitenzahl
      Dim i As Integer
      Dim Rg As Excel.Range
      
      
      Worksheets("FAT_Word").Visible = True           'Excel Tabelle einbelnden
      WA.Visible = True
      
      'Word Datei öffnen
      With FAT_Word_Dateien
        Set WD = WA.Documents.Open(Filename:=.TextBox1.Value & "\" & .TextBox2.Value)
      End With
      
      Seiten = WD.ComputeStatistics(wdStatisticPages)       'Anzahl der Seiten im Word Dokument bestimmen
      
      For i = 1 To Seiten                                   'Alle Seiten einzeln kopieren
        WA.Selection.Goto what:=wdGoToPage, Which:=wdGoToNext, Name:=i
        Set Pg = WD.Bookmarks("\Page").Range
        Pg.Copy
        Set Rg = Worksheets("FAT_Word").Range("A" & i + (i - 1) * 50)      'Excel Zelle auswählen in die kopiert werden soll
        DoEvents
        Rg.PasteSpecial Paste:=xlPasteAll
          
      Next i
      
      WD.Close    'Word-Dokumenten-Datei wieder schließen
      WA.Quit     'Word-Applikation beenden
    
    
    End Sub
    
     
    Exl121150, 19. August 2015
    #4
  5. Potatas Neuer User
    Supi!

    Hab es eben an 2 Dateien getestet. Hat sehr gut funktioniert!
    Danke für deine Hilfe und die Ausführliche Erklärung dazu :)
     
    Potatas, 20. August 2015
    #5
Thema:

Word Datei in excel via VBA einfügen

Die Seite wird geladen...
  1. Word Datei in excel via VBA einfügen - Similar Threads - Word Datei excel

  2. Word-Datei mit Excel im Bearbeitungsmodus öffnen

    in Microsoft Excel Hilfe
    Word-Datei mit Excel im Bearbeitungsmodus öffnen: Hallo Zusammen, Ich öffne über Excel in meinem Code eine Word-Datei und beschreibe sie mit unterschiedlichen Daten, funktioniert auch alles soweit. Die Word-Datei ist schreibgeschützt. Word 2013...
  3. Excel-/Word-/PowerPoint-Datei wird beschädigt, wenn eine Datei geöffnet wird, die ein ...

    in Microsoft Excel Tutorials
    Excel-/Word-/PowerPoint-Datei wird beschädigt, wenn eine Datei geöffnet wird, die ein ...: Excel-/Word-/PowerPoint-Datei wird beschädigt, wenn eine Datei geöffnet wird, die ein VBA-Projekt enthält, oder nachdem ein Makro in einer geöffneten Datei aktiviert wurde Excel für Microsoft 365...
  4. Word Datei aus Excel erstellen

    in Microsoft Excel Hilfe
    Word Datei aus Excel erstellen: Guten Abend, ich möchte aus Excel 2016 eine Word-Datei erstellen. Beispiel: Excel Zelle A1 = 2178 Excel Zelle A2 = KA20-0220 Excel Zelle A3 = D7080 Excel Zelle A4 = 1 Aus diesen Daten soll sich...
  5. Aus Excel Datei mehrere Word-Dokumente erstellen

    in Microsoft Excel Hilfe
    Aus Excel Datei mehrere Word-Dokumente erstellen: Hey, ich möchte aus einer Excel-Rechnungsliste mit mehreren Unternehmen einzelne Rechnungen für jedes Unternehmen mit den Daten der Exceldatei generieren lassen. Habe bei meinen Recherchen...
  6. Excel Button zum erstellen neuer Datei

    in Microsoft Excel Hilfe
    Excel Button zum erstellen neuer Datei: Hi, Ich sitze momentan vor einem Problem. Ich möchte nämlich in einer Datei (Quelldatei) einen Button erstellen. Wenn man auf diesen klickt soll er eine neue Datei erstellen, die aber einen...
  7. Excel-Word-Serienbrief - Excel Datei automatisch aktualisieren

    in Microsoft Excel Hilfe
    Excel-Word-Serienbrief - Excel Datei automatisch aktualisieren: Hallo liebe Helferlein! Habe folgendes Problem: Ich habe eine Serienbriefquelldatei in Excel erstellt, die eine Funktion enthält, die mir vom aktuellen Datum aus gesehen den übernächten...
  8. Word/Excel Formulare mit dynamischen Abruf von Daten aus geschlossenen Excel Dateien

    in Microsoft Excel Hilfe
    Word/Excel Formulare mit dynamischen Abruf von Daten aus geschlossenen Excel Dateien: Hallo zusammen, ich hoffe bei euch ist alles gut. Ich möchte verschiedene gesicherte Formulare in denen lediglich bestimmte Felder/Zellen bearbeitet werden können (Word oder Excel, am liebsten...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden