Daten aus Excel automatisiert in Word einfügen
#1
Hallo Zusammen,
gibt es eine Möglichkeit die Zahlen in der Spalte P in der Excel-Datei im Anhang genau in der gleichen Item-Reinfolge von Excel in der Word-Datei zu übertragen in den jeweiligen definierten Textmarken?
Zudem wäre es noch so, wenn in der Spalte P keine Zahl steht, soll er die Zahl in Spalte E automatisch nehmen und dann auch in den jeweiligen Textmarker einfügen.
(OP Wert von Spalte E (Excel) in Textmarker im Bereich OP (Word))
 
Da die Struktur der Items in der Excel-Datei und der Word-Datei immer gleich sind (Item 1 dann Item 2 usw.) sollen die Daten von oben nach unten in den jeweiligen Textmarkern eingetragen werden.
Zudem wäre es auch Super, wenn ich die Summe in Spalte Q in den definierten Textmarker Summe übertragen kann. Dieser Textmarker kann auch immer Summe heißen.
Das Problem ist die Summe in Spalte Q kann sich immer in einer anderen Zeile befinden, einmal kann Sie in Zeile 67 stehen oder in eine andere Zeile befinden, aber immer in Spalte Q. Die Summe liegt aber immer gegenüber des Textes Gesamt: in der Spalte O.
Vielleicht kann man da eine Verbindung programmieren: Suche Gesamt: in Spalte O und Trage dann in der Spalte Q den Wert in der gleiche Zeile in den Textmarker Summe in der Word-Datei ein.
 
Die Datei soll bei jeder Makroaktivierung (Button Übertragen von Daten an Word) als neu Datei gespeichert werden. Die alte Datei soll aber noch vorhanden bleiben.
Zudem soll der Dateiname von der Zelle C3 übernommen werden.
 
Gibt es auch eine Möglichkeit, falls die Word-Datei verschoben wurde, dass automatisch sich ein Fenster in Excel öffnet und man dann den neuen Pfad vorgeben kann, wo die Datei liegt.
 
Ist es möglich das die Textmarker immer den gleichen Namen haben kann aber trotzdem die unterschiedlichen Werte der jeweiligen Items übernimmt von Excel?

Ich hab emein bestes versucht aber ich ahbe es nur soweit geschaft:

Sub ÜbertragungvonDateninWord()

'Bibliothek aktivieren

Dim wordapp As New Word.Application
Dim doc As Word.Document

'Word sichtbar machen
wordapp.Visible = True

'Word-Datei öffnen
Set doc = wordapp.Documents.Open("C:\Users\Kluge\Desktop\Word-Muster.docx")

'Wenn die Datei nicht gefunden wird, soll die möglichkeit bestehen den Pfad bei Excel neu einzugeben in eine Suchfenster

'Word-Datei mit Exceldaten befüllen

doc.Activate
doc.Bookmarks("Überschrift").Range.Text = Range("C3")

'Formel zum Einfügen der Werte von Spalte P;E und Q in in den jeweiligen Textmarkern in der Word-Datei wie auch Summe

'Word-Datei abspeichern

doc.SaveAs2 ThisWorkbook.Path & "\filecells(3,3)" & ".docx"

'Word-Datei schließen
doc.Close savechanges:=False

'Word-Applikation schließen
wordapp.Quit

End Sub

Ich hoffe Ihr könnt mir bei diesem Problem weiterhelfen.

Ich danke euch.

mfg

Robert Kluge


Angehängte Dateien
.xlsm   Excel-Muster.xlsm (Größe: 39,42 KB / Downloads: 7)
.docx   Word-Muster.docx (Größe: 19,15 KB / Downloads: 8)
Antworten Top
#2
Hallo Robert,
 
Ich habe das so angelegt, dass die Bookmarks erhalten bleiben. Somit ist bei versehentlichen Speichern sichergestellt, dass die Bookmarks erhalten bleiben.

.xlsm   Excel zu Word.xlsm (Größe: 45,09 KB / Downloads: 8)
 
 Gruß Uwe
Antworten Top
#3
Hallo Uwe,
 
deine Makro ist für mich wirklich beindrucken.
Danke das du mir Hilfst.
Ich hätte noch 2 Fragen:
 
1.      Ist es möglich, dass beim Drücken des Buttons (Übertragung von Daten an Word) das sich ein Fenster öffnet, wo ich die Word-Datei auswählen kann wo dann die Daten übertragen werden können zu den Textmarken?
2.      Mir ist aufgefallen, wenn ich eine neue Position einfüge, dass das Makro ab der neuen eingefügten Position nicht die Daten weiter in den nachfolgenden Positionen in der Word-Datei überträgt.
Ist es möglich das das Makro die Daten von Spalte P bzw. Spalte E von oben nach unten in der Word-Datei überträgt. Unabhängig davon, wie die Textmarken benannt wurden.
Die Positionen von der Excel-Datei sind immer in der gleichen Reinfolge wie in Word.(Diese Items können von 1 bis 300 variieren von der Anzahl)
Im Anhang befindet sich die neue Excel-Datei-Version 1 mit der neu hinzugefügten Item 5 und die Word-Datei-Version 1 mit dem neuen Item 5.
Da kann man sehen, dass ab Item 4 die Daten nicht mehr übertragen wurden.
Kann man da was machen?
 
Danke für dein Hilfe.
 
Mfg
 
Robert


Angehängte Dateien
.xlsm   Excel zu Wordneu-Version 1.xlsm (Größe: 40,78 KB / Downloads: 4)
.docx   Word-Muster-Version 1.docx (Größe: 19,44 KB / Downloads: 4)
Antworten Top
#4
Hallo Robert,

zu 1. Das ist problemlos möglich. Der Pfad ist ein String und der kann im Dateifenster in die Variable Pfad übergeben werden.

beispielhaft so:
Code:
Sub PfadEinlesen()
    Dim pfad
    With Application.FileDialog(msoFileDialogOpen)
        .AllowMultiSelect = False
        .Show
        pfad = .SelectedItems.Item(1)
    End With
End Sub

Dazu gibt es jede Menge Beispiele im Netz.

zu 2.  Das ist schon umsetzbar. Dazu wirst du aber zu folgenden Vorgehensweise gezwungen sein:

In sämtlichen dafür verwendeten Worddateien alle Marker von oben nach unten durchnummeriert neu anlegen nach dem Prinzip Marke1,Marke2 usw. (viel Fleißarbeit)
In deiner Beispieldatei ist an dieser Stelle Kraut und Rüben los: 2 Marker an der gleichen Stelle (einer davon ohne Bedeutung für diesen Vorgang)

- Worddatei öffnen --> alle darin enthaltenen Marker auslesen und ins Array arrTM packen.
Das geht beispielhaft ausgehend die vorhandenen Prozedur von mir so:

Code:
    Dim arrMarkers()
    With wdDok.Bookmarks
        ReDim arrMarkers(1 To .Count)
        For i = 1 To .Count
            arrMarkers(i) = wdDok.Range.Bookmarks(i)
        Next i
    End With

- arrWerte dimensionieren entsprechend ubound(arrTM) (Anzahl Marker)

- Werte aus Excel ins arrWerte einlesen

- den Kram zu Word wie gehabt in die Markerpositionen übergeben.

Du solltest dir bevor du loslegst genau überlegen ob du dabei die Übersicht behällst.

Gruß Uwe
Antworten Top
#5
Verzichte auf 'Papierdenken'.
Verwende 'Mergefields' in Word, oder 'Link' fields
Du brauchst gar kein VBA.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#6
Hallo Uwe,

danke für dein Antwort.
Das hört sich ganz schön kompliziert an.
Das übersteigt bei weiten mein Wissen über VBA.

zu Punkt 1:
Ich bekomme es leider nicht hin den Code mit deiner Makro zu verbinden.
Er zeigt mir da immer einen Fehler.
Kannst du mir zeigen wie ich den Code in deiner vorhanden Makro in der Excel-Datei implementieren kann?

zu Punkt 2:

Du hast vollkommen recht das die Textmarker komplett durcheinander sind.
Ich gehe immer so vor, dass ich vorgeschrieben Muster habe und diese in Word per Text aus Datei einfüge.
Somit ist es eigentlich immer so das die Textmarker immer in unterschiedlicher reinfolge in der Word-Datei sich befinden.
z.B.   VKPreis3 ist bei Item 1 und VKPreis5 ist bei Item 2
Ich weiß nicht ob ich das richtig vertsanden habe was du zu diesem Punkt geschrieben hast.
Ist es so dass ich bevor ich die Makro in Excel mit den Button betätige, muss ich vorher die Word-Datei öffnen und diese Makro in Word aktivieren:
Dim arrMarkers()
with wdDok.Boomarks
ReDim arrMarkers (1 To. Count)
For i= To. Count
arrMarkers(i) = wdDok.Range Bookmarks(i)
next i
End With

Damit merkt er sich die Reinfolge der Textmarker z.B. VKPreis25 VKPreis 20 von oben nach unten und überträgt dann beim Betätigen 
des Buttons in der Excel-Datei die Werte von oben nach unten in die Word-Datei?

Es tut mir leid, wenn ich dir nicht so gut folgen kann.

mfg

Robert


Angehängte Dateien
.docx   Word-Muster-Version 1.docx (Größe: 19,44 KB / Downloads: 1)
.xlsm   Excel zu Wordneu-Version 1.xlsm (Größe: 40,78 KB / Downloads: 2)
Antworten Top
#7
Hallo Robert,
 
ich habe es mal so gebaut, dass es Wurst ist in welcher Abfolge die Marker und dessen Namen angelegt wurden.
Des Weiteren ist es jetzt egal wie viel Zeilen zwischen den Items sich befinden.
Benutzt habe ich die Dateien aus #3
Dann kannst du die zu bearbeitende Datei im Dateifenster wählen.
Code:
Option Explicit

Sub ÜbertragungvonDateninWord()
    Dim Pfad$, lz&, i&, j&, arrWerte(), arrTM(), arrItem(), Sum As Variant
    Dim WdApp As Object, wdDok As Object, objBkm As Object, rngBkm As Object
    With Tabelle1
        lz = .Cells(Rows.Count, 2).End(xlUp).Row
        For i = 1 To lz + 20
            If Mid(.Cells(i, 2), 1, 4) = "Item" Or .Cells(i, 2) = "OP" Then
                j = j + 1
                ReDim Preserve arrItem(1 To j)
                arrItem(j) = i
            End If
        Next i
        Sum = Application.Match("Gesamt:", .Columns("O"), 0)
        If Not IsError(Sum) Then ReDim Preserve arrItem(1 To j + 1): arrItem(j + 1) = Sum
    End With
    j = 0
    ChDir ActiveWorkbook.Path
    With Application.FileDialog(msoFileDialogOpen)
        .Title = "Auswahl der Worddatei"
        .AllowMultiSelect = False
        .Filters.Clear
        .Filters.Add "Word-Dateien", "*.do*"
        .Show
        If .SelectedItems.Count = 0 Then Exit Sub
        Pfad = .SelectedItems.Item(1)
    End With
   
    Set WdApp = CreateObject("Word.Application")
    Set wdDok = WdApp.Documents.Open(Filename:=Pfad, ReadOnly:=False)
    WdApp.Visible = True
    With wdDok.Bookmarks
        ReDim arrTM(0 To .Count - 1)
        For i = 0 To .Count - 1
            arrTM(i) = wdDok.Range.Bookmarks(i + 1)
        Next i
    End With
   
    With Tabelle1
        ReDim arrWerte(1 To UBound(arrItem))
        arrWerte(1) = .Range("C3")
        For i = 2 To UBound(arrItem) - 1
            If .Cells(arrItem(i), 16) <> "" Then
                arrWerte(i) = Format(.Cells(arrItem(i), 16), "#,##0.00")
            Else
                arrWerte(i) = Format(.Cells(arrItem(i), 5), "#,##0.00")
            End If
        Next i
        arrWerte(i) = Format(.Cells(arrItem(i), 17), "#,##0.00")
    End With

    For i = 0 To UBound(arrTM) - 1
        With wdDok
            Set objBkm = .Bookmarks(arrTM(i))
            Set rngBkm = objBkm.Range
            rngBkm.Text = arrWerte(i + 1)
            .Bookmarks.Add Name:=arrTM(i), Range:=rngBkm
        End With
    Next i
    Set wdDok = Nothing
    Set WdApp = Nothing
End Sub
 
 Gruß Uwe
Antworten Top
#8
Beide Dateien downloaden und in identische Folder speichern.
Word Datei öffnen.
Das reicht schon.

Schau mal die Felder an:  Alt-F9
Aktualisieren: F9


Angehängte Dateien
.docx   __Wordmerge_snb.docx (Größe: 22,48 KB / Downloads: 1)
.xlsx   __merge_snb.xlsx (Größe: 34,83 KB / Downloads: 0)
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#9
Hallo Uwe,

das funktioniert wirklich super,
wenn ich auf den Button klicke öffnet sich ein Fenster wo ich die Word-Datei wählen kann.
Danke dir.
Das ist für mich wirklich beeindruckend.
Ich möchte mich nochmal wirklich für deine Zeit bedanken das du mir Hilfst.

Es sind mir leider noch zwei Sachen aufgefallen die mein Fehler waren weil ich das nicht richtig an dir kommuniziert habe, sorry:
Ich habe auch den Marker mit den Dateinamen entfernt. Ist nicht mehr notwendig.
Jetzt hat er aber folgendes gemacht:
In Item 1) steht nicht die 10 sondern eine Dateiname.
Kann man das noch Ändern.

Die Summe übernimmt er leider nicht:
Die Summe kann immer in einer anderen Zeile sich befinden wenn neue Zeilen eingefügt werden.
Kann man das so machen, nur die Zahl in Spalte Q nehmen wenn der Text Gesamt: in der gleichen Zeile steht?
Die Marke kann in Word auch immer Summe heißen.
Diese verändert sich nicht wie die anderen VKPreise in den Namen.

Kann man da was machen?

mfg

Robert


Angehängte Dateien
.docx   Word-Muster-Version 1.docx (Größe: 19,46 KB / Downloads: 1)
.xlsm   Excel zu Wordneu-Version 1.xlsm (Größe: 46,72 KB / Downloads: 1)
Antworten Top
#10
Hallo Robert,

man muss nur in 2 Zeilen ändern.

Zeile 42 auskommentieren und Zeile 43 den Zählbereich so ändern:
Code:
For i = 1 To UBound(arrItem) - 1

angepasst mit Hinweisen in den beiden Zeilen:
Code:
Option Explicit

Sub ÜbertragungvonDateninWord()
    Dim Pfad$, lz&, i&, j&, arrWerte(), arrTM(), arrItem(), Sum As Variant
    Dim WdApp As Object, wdDok As Object, objBkm As Object, rngBkm As Object
    With Tabelle1
        lz = .Cells(Rows.Count, 2).End(xlUp).Row
        For i = 1 To lz + 20
            If Mid(.Cells(i, 2), 1, 4) = "Item" Or .Cells(i, 2) = "OP" Then
                j = j + 1
                ReDim Preserve arrItem(1 To j)
                arrItem(j) = i
            End If
        Next i
        Sum = Application.Match("Gesamt:", .Columns("O"), 0)
        If Not IsError(Sum) Then ReDim Preserve arrItem(1 To j + 1): arrItem(j + 1) = Sum
    End With
    j = 0
    ChDir ActiveWorkbook.Path
    With Application.FileDialog(msoFileDialogOpen)
        .Title = "Auswahl der Worddatei"
        .AllowMultiSelect = False
        .Filters.Clear
        .Filters.Add "Word-Dateien", "*.do*"
        .Show
        If .SelectedItems.Count = 0 Then Exit Sub
        Pfad = .SelectedItems.Item(1)
    End With
  
    Set WdApp = CreateObject("Word.Application")
    Set wdDok = WdApp.Documents.Open(Filename:=Pfad, ReadOnly:=False)
    WdApp.Visible = True
    With wdDok.Bookmarks
        ReDim arrTM(0 To .Count - 1)
        For i = 0 To .Count - 1
            arrTM(i) = wdDok.Range.Bookmarks(i + 1)
        Next i
    End With
  
    With Tabelle1
        ReDim arrWerte(1 To UBound(arrItem))
        'arrWerte(1) = .Range("C3") 'falls wieder benötigt dann die Auskommentierung rausnehmen
        For i = 1 To UBound(arrItem) - 1    ' falls Dateiname wieder benötigt wird dann For i = 2 To UBound(arrItem) - 1
            If .Cells(arrItem(i), 16) <> "" Then
                arrWerte(i) = Format(.Cells(arrItem(i), 16), "#,##0.00")
            Else
                arrWerte(i) = Format(.Cells(arrItem(i), 5), "#,##0.00")
            End If
        Next i
        arrWerte(i) = Format(.Cells(arrItem(i), 17), "#,##0.00")
    End With

    For i = 0 To UBound(arrTM)
        With wdDok
            Set objBkm = .Bookmarks(arrTM(i))
            Set rngBkm = objBkm.Range
            rngBkm.Text = arrWerte(i + 1)
            .Bookmarks.Add Name:=arrTM(i), Range:=rngBkm
        End With
    Next i
    Set wdDok = Nothing
    Set WdApp = Nothing
End Sub

Gruß Uwe
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste