Excel Daten in ein Word-Formular übertragen

  • Excel

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von lanbo.

    Excel Daten in ein Word-Formular übertragen

    Hallo Leute,

    ich habe ein etwas aufwändigeres Anliegen, ich denke zumindest das es Aufwendig ist.

    Ich habe eine Word-Datei, die als Vorlage für ein PDF-Formular dient. Dazu baue ich jetzt gerade eine Excel-Tabelle, in der die ganzen Informationen vorhanden sind, die in die einzelnen Felder des Forlumarls sollen.
    Das ich aus Excel nicht direkt das PDF-Formular ansteuern kann ist mir klar. Ich habe das Formular aber noch als Word-Datei in der die Felder vorhanden sind.

    Was ich nun machen möchte:
    Ich möchte ein Makro/VBA schreiben, das die Informationen, die in einer Zeile stehen, in die Word-Datei überträgt.

    Wenn ich den Inhalt der Word-Datei in ein Tabellenblatt der Excel-Datei kopiere, wird die ganze Formatierung des Formulars zerschossen.

    Über sämtliche Tipps oder Anregungen bin ich sehr dankbar.
    Grüße
    Ich habe mittlerweile ein zusätzliches Probelm bei dem mir wahrscheinlich eher geholfen werden kann.

    Ich habe ein Formularsteuerelement(Schaltfläche) "Neu" in meine Tabelle eingebunden um die UserForm1 zu laden. Das ist der Weg über den ich neue einträge der Tabelle hinzufüge.
    Nun habe ich eine zweite Schaltfläche "Bearbeiten" eingebaut, mit der ich die einträge bearbeiten will.

    Das Bearbeiten der Tabelle erfolgt in 3 Steps.

    Step1: Über die Schaltfläche "Neu" werden die neuen Daten zur Tabelle hinzugefügt und von den TextBoxen in die zugeordneten Zellen geschrieben. Man kennt zu diesem Zeitpunkt nicht alle Angaben die Abgefragt werden.

    Step2: Nun hat man mehr Informationen und möchte den vorhandenen Datensatz bearbeiten. Also klicke ich in die Zeile, in die der Datensatz steht und dann auf die Schaltfläche "Bearbeiten". Da es auch sein kann, das sich die vorhandenen Werte geändert haben, sollen die UserForm geladen werden und die vorhandene Werte in die zugehörigen TextBoxen geschoben werden.

    Step3: Gleich wie Step2. Wieder die vorhandenen Daten laden und in der UserForm anzeigen.

    Für mich ist klar das ich ein allgemeines Modul habe, welches der Schaltfläche Neu zugeordnet ist, mit dem ich die UserForm aufrufe.
    Ich habe nun auch ein zweites Modul erstellt, in der ich erstmal den RowIndex der ActiveCell ermittel. Ich kann aber aus diesem Modul nicht die Werte der Zellen in die TextBoxen schreiben.

    VB.NET-Quellcode

    1. Dim Row As Long
    2. Row = Cells(ActiveCell.Row)
    3. Cells(Row, 1).Value = tbReportNr.Value 'TextBox kann nicht angesprochen werden.


    Ich hoffe ich hab das verständlich erklärt :/

    lanbo schrieb:

    Cells(Row, 1).Value = tbReportNr.Value

    Visual Basic-Quellcode

    1. Tabelle1.Cells(Row, 1).Value = tbReportNr.Value

    Oder (der absolute Hack)

    Visual Basic-Quellcode

    1. ActiveCell.WorkSheet.Cells(Row, 1).Value = tbReportNr.Value


    Warum verwendest du ActiveCell?
    Macht das Sinn?
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Wenn ich, oder ein anderer, in der Tabelle arbeiten und dann in Zeile 257 ein Datensatz haben den wir bearbeiten wollen, habe ich mir gedacht das man in die Zeile klickt und dann auf "Bearbeiten". Damit dann die Daten aus der richtigen Zeile in die UserForm geladen werden besorge ich mir über ActiveCell die Row.
    Ausserhalb des Codebereichs des Worksheet, also z.B. in einem Modul, musst du für die Zelladressierung das entsprechende Worksheet mit angeben.
    ActiveCell ist insofern kritisch, dass es sich ändert, sobald der User in eine andere Zelle klickt.
    Deshalb in solchen Fällen den Bereich einmal sichern und zukünftig damit weiter arbeiten.

    Visual Basic-Quellcode

    1. Dim WorkRow as Range
    2. ​Set WorkRow = ActiveCell.EntireRow
    3. WorkRow.Cells(1,1).Value = tbReportNr.Value

    Der Range ist einem Tabellenblatt zugeordnet.
    Eine Zeilennummer ist es nicht.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    petaod schrieb:

    Dim WorkRow as Range
    Set WorkRow = ActiveCell.EntireRow
    WorkRow.Cells(1,1).Value = tbReportNr.Value


    Okay, das verstehe ich.
    Wenn ich das allerdings so mache, habe ich für den RowIndex im Cells-Befehl keine Variabel. Das war ja mein Ziel. Die Spalten kann ich per Nummern abfragen und so die Werte zu ordnen.

    Und es geht darum von der Tabelle in die UserForm zu laden.
    Daher:

    VB.NET-Quellcode

    1. UserForm1.tbReportNr.Value = WorkRow.Cells(1, 1)


    UPDATE:
    So habe ich es jetzt:

    VB.NET-Quellcode

    1. Dim wbMappe1 As Workbook
    2. Set wbMappe1 = Application.Workbooks("Report.xlsm")
    3. Dim wsData As WorkSheet
    4. Set wsData = wbMappe1.Worksheets("Data")
    5. Dim WorkRow As Long
    6. WorkRow = ActiveCell.Row
    7. UserForm1.tbReportNr.Value = wsData.Cells(WorkRow, 1).Value

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

    lanbo schrieb:

    Wenn ich das allerdings so mache, habe ich für den RowIndex im Cells-Befehl keine Variabel

    Brauchst du auch nicht.
    Der Range umfasst genau eine Zeile und deshalb kannst du für den RowIndex immer 1 einsetzen.
    ​WorkRow.Cells(1,1) ist die erste Zelle deiner Zeile
    ​wsData.Cells(1,1) ist die erste Zelle des Arbeitsblatts (A1).
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --