Werte aus markierter Zeile in Word übertragen

  • Excel

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Bo Mad.

    Werte aus markierter Zeile in Word übertragen

    Hallo an alle,

    ich möchte gern Daten aus Excel in ein vorgefertigtes Word-Dokument übertragen. Der nachstehende Code funktioniert schon sehr gut, meine Word-Vorlage wird richtig gefüllt+geöffnet:

    .ActiveDocument.Bookmarks("ReklaNr").Range.Text = Range("A2")
    .ActiveDocument.Bookmarks("Datum").Range.Text = Range("D2")
    .ActiveDocument.Bookmarks("Kunde").Range.Text = Range("E2")
    .ActiveDocument.Bookmarks("Gesprächspartner").Range.Text = Range("F2")
    .ActiveDocument.Bookmarks("Bearbeiter").Range.Text = Range("C2")
    .ActiveDocument.Bookmarks("Artikel").Range.Text = Range("H2")
    .ActiveDocument.Bookmarks("Kommission").Range.Text = Range("I2")
    .ActiveDocument.Bookmarks("Reklamationsgrund").Range.Text = Range("J2")
    .ActiveDocument.Bookmarks("Meilensteine").Range.Text = Range("K2")
    .ActiveDocument.Bookmarks("Ursache").Range.Text = Range("L2")
    .ActiveDocument.Bookmarks("Verursacher").Range.Text = Range("M2")

    Jetzt sollen aber nicht immer nur die Elemente aus der Zeile 2 gezogen werden, sondern die aus der jeweils manuell markierten Zeile. Dann wird per Tastenkombi das Makro aktiviert und die gefüllt Word-Vorlage geöffnet.
    ich habe schon gelesen, dass es da eine Möglichkeit über activecell.row gibt, ich bekomme das aber nicht zu 100% hin...

    Bitte um eure Hilfe, Tausend Dank im Voraus!

    Beste Grüße

    Bo Mad
    Du kannst über die SelectedCells und deren Index Deine Daten auswählen:

    Visual Basic-Quellcode

    1. Dim Cell As Range
    2. For Each Cell In Selection
    3. MsgBox (Cell.Value & "<->" & Cell.Column)
    4. Next

    MsgBox ist hier natürlich nur der Test, um rauszufinden, was gerade selektiert ist und Cell.Column zeigt die Spalte an. Aber mit letzterem kannst Du Deine Quellspalte rausfinden und ermitteln, aus welchem Tabellenteil Deine selektierten Zellen kommen. Wenn natürlich in Zeile 1 der jew. Spalte schon eine konkrekte/passende Info steht ("ReklaNr", "Datum", "Kunde"), kannst Du natürlich auch die erste Zeilenzelle als Infogeber verwenden: MsgBox (Cell.Value & "<->" & Cell.Column & "<->" & Cells(1, Cell.Column).Value)
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hallo VaporiZed,

    und danke für deine Hilfe. Leider bekomme ich das noch immer nicht so umgesetzt, wie ich es mir vorstelle....

    Meine Datentabelle ist so aufgebaut, dass die erste Zeile als Überschriftenzeile gilt und die darunterliegenden Zeilen jeweils einen zusammengehörenden Datensatz enthalten. Nun ist es mein Ziel, die Arbeit der Kollegen so zu vereinfachen, dass nur eine Zeile markiert werden muss (per Klick auf die Zeilennummer), eine Tastekombination gedrückt werdens und schon öffnet sich ein Word-Dokument mit den entsprechenden Inhalten zum Ausdrucken+Abspeichern.

    Um das nochmal zu konkretisieren: Ich würde gern wissen, was hinter .Range.Text = Range( muss, damit der Wert der gerade markierten Zeile und der fest definierten Spalte für die Word-Textmarke gezogen wird.

    Eine MsgBox ist zwar nett, führt aber nicht zum gewünschten Ziel :)

    Gibt es noch andere Möglichkeiten, das Gewünschte umzusetzen? Ich bin leider VB-Neuling....

    Danke im Voraus!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Bo Mad“ ()

    Bo Mad schrieb:

    Eine MsgBox ist zwar nett, führt aber nicht zum gewünschten Ziel

    Ich erinnere nur an

    VaporiZed schrieb:

    MsgBox ist hier natürlich nur der Test, um rauszufinden, was gerade selektiert ist


    Da mir die neuen Infos irgendwie nix sagen, wär es wohl besser, wenn Du ein paar Screenshots machst:
    • Eine Excel-Tabelle mit Testdaten
    • die Markierung, auf welchen Teil der Tabelle man klicken soll (»dass nur eine Zeile markiert werden muss (per Klick auf die Zeilennummer)«), da beim Klick auf die Zeilennumer die gesamte Zeile ausgewählt wird, Du jedoch geschrieben hast, dass »die darunterliegenden Zeilen jeweils einen zusammengehörenden Datensatz enthalten« => die zusammenhängenden Daten sind in einer Spalte, jedoch nicht in einer Zeile
    • welche der gezeigten Daten in welcher Kombinaton oder Reihenfolge zusammengesetzt werden sollen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hallo,

    anhängend ein Screenshot der Tabelle mit zwei Beispiel-Datensätzen.

    Die markierte Zeile ist ein Datensatz. Per Klick auf die Zeilennummer 3 soll die gesamte Zeile markiert werden und per Tastenkombination in Word übertragen werden. In meiner oben genannten Zuordnung funktioniert das sehr gut für die Zeile 2, das wars dann aber auch.

    Weiterhin anhängend der Screenshot 2, die Word-Vorlage mit den Eintragungen der Zeile 2.

    Ich hoffe, das hilft
    Bilder
    • Screenshot.png

      91,64 kB, 1.680×1.018, 190 mal angesehen
    • Screenshot2.png

      56,03 kB, 840×1.010, 213 mal angesehen
    Unverändert. Mein Codebeispiel bleibt fast gleich

    Visual Basic-Quellcode

    1. Dim Cell As Range
    2. For Each Cell In Selection
    3. If Cells(1, Cell.Column).Value = "" Then Exit For
    4. MsgBox (Cells(1, Cell.Column).Value & ": " & Cell.Value)
    5. Next

    es wird Spaltenkopf und Zelle der markierten Zeile in der entsprechenden Spalte angegeben. Damit ließe sich das komplette Word-Dokument zusammenbasteln.
    Oder unter Verwendung Deines Codes aus Post#1 auf nem anderen Weg:

    Visual Basic-Quellcode

    1. Dim SelectedRow As Integer
    2. SelectedRow = ActiveCell.Row
    3. .ActiveDocument.Bookmarks("ReklaNr").Range.Text = Range("A" & SelectedRow).Value
    4. .ActiveDocument.Bookmarks("Datum").Range.Text = Range("D" & SelectedRow).Value
    5. .ActiveDocument.Bookmarks("Kunde").Range.Text = Range("E" & SelectedRow).Value
    6. .ActiveDocument.Bookmarks("Gesprächspartner").Range.Text = Range("F" & SelectedRow).Value
    7. .ActiveDocument.Bookmarks("Bearbeiter").Range.Text = Range("C" & SelectedRow).Value
    8. .ActiveDocument.Bookmarks("Artikel").Range.Text = Range("H" & SelectedRow).Value
    9. .ActiveDocument.Bookmarks("Kommission").Range.Text = Range("I" & SelectedRow).Value
    10. .ActiveDocument.Bookmarks("Reklamationsgrund").Range.Text = Range("J" & SelectedRow).Value
    11. .ActiveDocument.Bookmarks("Meilensteine").Range.Text = Range("K" & SelectedRow).Value
    12. .ActiveDocument.Bookmarks("Ursache").Range.Text = Range("L" & SelectedRow).Value
    13. .ActiveDocument.Bookmarks("Verursacher").Range.Text = Range("M" & SelectedRow).Value
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Den Lösungsansatz mit der Messagebox kann ich leider nicht nachvollziehen...da fehlt mir vermutlich auch die Vorbildung.
    Aber die zweite, "meine" Variante habe ich direkt so übernommen und es funktioniert einwandfrei.

    Besten Dank für die schnelle Hilfe!

    Grüße Bo Mad