Anzeige
Archiv - Navigation
1752to1756
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

mehrspaltige Listeneinträge geteilt Word

mehrspaltige Listeneinträge geteilt Word
14.04.2020 14:19:15
Peer
Hallo liebe VBA-Gemeinde.
Ich habe bis jetzt mit meinen bescheidenden VBA Kenntnissen und viel fleißiger Hilfe aus diesem Forum mein Teilprojekt auf der Zielgeraden.
Dabei möchte ich UF Angaben nach Word in die Textmarken exportieren.
Zur Zeit hänge ich an zwei Problemen.
Ich habe eine ListBox "lst_TN_Auswahl". Aus diese Liste soll der Eintrag in die Bestandteile in die jeweiligen Textmarken von dem Worddokument "MF1.docx" eingetragen werden. Das macht er soweit auch, nur muss ich den Eintrag selektieren, sonst bekomme ich eine Fehlermeldung. Wie kann ich das lösen, das der gelistete Eintrag ohne Selektierung exportiert wird.
Hier komme ich zu zweiten Problem.
Es soll auch möglich sein, mehrere Einträge in lst_TN_Auswahl" zu haben, die dann alle in ein anderes Worddokument "MF1_mehrTN" übertragen werden sollen. Hier habe ich im UF zwei Radiobutton, die jeweils das nötige Dokument öffnen und die Daten eintragen. Im Worddokument "MF1_mehrTN" sollen sie in der Tabelle die Bestandteile der Listeneinträge untereinander geschrieben werden. Jeder zusätzlicher Eintrag erweitert die vorhandene Tabelle um eine Zeile.
Ein Gedanke ist, mit einer Schleife die Einträge abzurufen.
Mein VBA ist noch nicht so gut, um die Schleife nach meinen Vorstellungen hinzubekommen und dann in seine Bestandteile zu bringen. Und dann noch zu exportieren.
Vielleicht kann mir jemand auf die Sprünge helfen?
Anbei die Beispielmappe und die beiden Word-Dokumente im Zip (leider, weil das Format docx nicht hochgeladen werden kann).
https://www.herber.de/bbs/user/136697.zip
Vielen Dank
LG
Peer

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: mehrspaltige Listeneinträge geteilt Word
14.04.2020 16:44:59
Nepumuk
Hallo Peer,
wer soll sich durch die ganzen Makros wühlen? Lade ein Muster hoch mit dem relevanten Code.
Gruß
Nepumuk
AW: mehrspaltige Listeneinträge geteilt Word
14.04.2020 19:38:40
Peer
Hallo Nepumuk.
Entschuldige, dass ich hier nicht ausführlicher war. Kann verstehen, dass du dies bemängelst. Reduzieren konnte ich nicht, da alles irgendwie zusammen hängt.
Trotzdem Danke, das du dich bemüht hast.
LG
Peer
AW: mehrspaltige Listeneinträge geteilt Word
14.04.2020 17:11:54
fcs
Hallo Peer,
ZIP-Datei ist in diesem Fall besser, da dann die Namen der Dateien zum Testen erhalten bleiben.
Die Tatsache, dass du die Tabelle im Dokument für mehrere Teilnehmer in einer Textbox eingebaut hast machte die Sache reichlich komplizierter. Ich musste erst einmal in Word herausfinden, wie ich denn unter VBA an diese Tabelle herankomme. Naja-hat am Ende geklappt.
Ich habe das Öffnen der Word-Dateien jetzt so eingestellt, dass sie schreibgeschützt geöffnet werden. Dies hat 2 Vorteile:
  • 1.
    Man kann nicht versehentlich beim Speichern die Vorlage überschreiben.

  • 2.
    Man kann von Excel aus mehrere Worddateien von Excel aus erstellen ohne dass vorher jedesmal erst die zuvor erstellte Worddatei geschlossen bzw. unter einem anderen Namen gespeichert werden muss.

  • LG
    Franz
    Private Sub btn_ToWord_Click()
    Dim objApp As Object
    Dim objDocument As Object
    Dim objDocumentTab As Object
    Dim iItem As Integer
    Dim wdTab As Object 'Word.Table
    If Me.lst_TN_Auswahl.ListCount = 0 Then
    MsgBox "Es sind noch keine Teilnehmer eingetragen"
    Exit Sub
    End If
    'Anwendung Word starten
    Set objApp = CreateObject("Word.Application")
    'Word sichtbar machen
    objApp.Visible = True
    If opt_Einfach.Value = True Then
    'Word-Dokument öffnen
    Set objDocument = objApp.documents.Open(Filename:=ThisWorkbook.Path _
    & "\" & "MF1.docx", ReadOnly:=True)
    With objDocument
    .Bookmarks("KurzBez").Range.Text = txt_KurzBez.Value
    .Bookmarks("KursNr").Range.Text = txt_KursNr.Value
    .Bookmarks("LangBez").Range.Text = cbx_LangBez.Value
    .Bookmarks("Name").Range.Text = lst_TN_Auswahl.List(0, 1)
    .Bookmarks("Vorname").Range.Text = lst_TN_Auswahl.List(0, 2)
    End With
    ElseIf opt_Mehrfach.Value = True Then
    'Word-Dokument öffnen
    Set objDocumentTab = objApp.documents.Open(Filename:=ThisWorkbook.Path _
    & "\" & "MF1_mehrTN.docx", ReadOnly:=True)
    With objDocumentTab
    .Bookmarks("KurzBez").Range.Text = txt_KurzBez.Value
    .Bookmarks("KursNr").Range.Text = txt_KursNr.Value
    .Bookmarks("LangBez").Range.Text = cbx_LangBez.Value
    'Tabellenbox in Textbox einer Objektvariablen zuweisen
    Set wdTab = objDocumentTab.Shapes("Textfeld 4").TextFrame.TextRange.Tables(1)
    End With
    With Me.lst_TN_Auswahl
    For iItem = .ListCount - 1 To 0 Step -1
    wdTab.Cell(2, 1).Range.Text = .List(iItem, 1)
    wdTab.Cell(2, 2).Range.Text = .List(iItem, 2)
    wdTab.Cell(2, 3).Range.Text = .List(iItem, 3)
    wdTab.Cell(2, 4).Range.Text = .List(iItem, 4)
    If iItem > 0 Then wdTab.Rows.Add Beforerow:=wdTab.Rows(2)
    Next iItem
    End With
    Else
    Exit Sub
    End If
    End Sub
    

    Anzeige
    AW: mehrspaltige Listeneinträge geteilt Word
    14.04.2020 19:40:59
    Peer
    Hallo Franz.
    Was soll ich sagen, genau meine Vorstellung. Ich experimentiere hier mit Schleifen und du hast gleich die richtige Version für mich.
    Vielen Dank. Da werde ich mich mal durch den Code hangeln, um einiges wenigstens zu verstehen.
    Nochmals vielen Dank.
    LG
    Peer
    AW: mehrspaltige Listeneinträge geteilt Word
    14.04.2020 20:28:42
    Peer
    Hallo Franz.
    Ich wollte an deinem Code noch eine kleine Änderung machen.
    Ich möchte die Abfrage stellen, wenn Option "einfach" ausgewählt und in der Listbox mehr als ein Eintrag ist, eine Meldung kommt und der Sub beendet wird. Dazu habe ich folgendes in deinen Code hinzufügen wollen. Klappt aber nicht. Ich dachte inzwischen, ich komme langsam in das nächste Lebel der VBA-Kenntnisse, werde aber durch solche Probleme wieder zurück geschmissen.
        Dim objApp As Object
    Dim objDocument As Object
    Dim objDocumentTab As Object
    Dim iItem As Integer
    Dim wdTab As Object 'Word.Table
    If Me.lst_TN_Auswahl.ListCount = 0 Then
    MsgBox "Es sind noch keine Teilnehmer eingetragen"
    Exit Sub
    End If
    'Anwendung Word starten
    Set objApp = CreateObject("Word.Application")
    'Word sichtbar machen
    objApp.Visible = True
    If opt_Einfach.Value = True And Me.lst_TN_Auswahl.ListCount > 1  _
    Then
    MsgBox "Nur einen Teilnehmer auswählen"
    Exit Sub
    ElseIf opt_Einfach.Value = True And Me.lst_TN_Auswahl.ListCount = 1 Then
    'Word-Dokument öffnen
    Set objDocument = objApp.documents.Open(Filename:=ThisWorkbook.Path _
    & "\" & "MF1.docx", ReadOnly:=True)
    With objDocument
    .Bookmarks("KurzBez").Range.Text = txt_KurzBez.Value
    .Bookmarks("KursNr").Range.Text = txt_KursNr.Value
    .Bookmarks("LangBez").Range.Text = cbx_LangBez.Value
    .Bookmarks("Name").Range.Text = lst_TN_Auswahl.List(0, 1)
    .Bookmarks("Vorname").Range.Text = lst_TN_Auswahl.List(0, 2)
    End With
    ElseIf opt_Mehrfach.Value = True Then
    'Word-Dokument öffnen
    Set objDocumentTab = objApp.documents.Open(Filename:=ThisWorkbook.Path _
    & "\" & "MF1_mehrTN.docx", ReadOnly:=True)
    With objDocumentTab
    .Bookmarks("KurzBez").Range.Text = txt_KurzBez.Value
    .Bookmarks("KursNr").Range.Text = txt_KursNr.Value
    .Bookmarks("LangBez").Range.Text = cbx_LangBez.Value
    'Tabellenbox in Textbox einer Objektvariablen zuweisen
    Set wdTab = objDocumentTab.Shapes("Textfeld 4").TextFrame.TextRange.Tables(1)
    End With
    With Me.lst_TN_Auswahl
    For iItem = .ListCount - 1 To 0 Step -1
    wdTab.Cell(2, 1).Range.Text = .List(iItem, 1)
    wdTab.Cell(2, 2).Range.Text = .List(iItem, 2)
    wdTab.Cell(2, 3).Range.Text = .List(iItem, 3)
    wdTab.Cell(2, 4).Range.Text = .List(iItem, 4)
    If iItem > 0 Then wdTab.Rows.Add Beforerow:=wdTab.Rows(2)
    Next iItem
    End With
    Else
    Exit Sub
    End If
    
    Vielleicht kannst du nochmal helfen?
    LG
    Peer
    Anzeige
    AW: mehrspaltige Listeneinträge geteilt Word
    14.04.2020 21:07:45
    Peer
    Hallo.
    Ich glaube, ich habe es hinbekommen. Nicht schön, aber es erfüllt erstmal seinen Zweck.
    Vielen Dank nochmal an alle, die mir geholfen haben oder helfen wollten.
        Dim objApp As Object
    Dim objDocument As Object
    Dim objDocumentTab As Object
    Dim iItem As Integer
    Dim wdTab As Object 'Word.Table
    If Me.opt_Einfach.Value = False And Me.opt_Mehrfach.Value = False Then
    MsgBox "Wähle ein Vorlage aus"
    Exit Sub
    End If
    If Me.lst_TN_Auswahl.ListCount = 0 Then
    MsgBox "Es sind noch keine Teilnehmer eingetragen"
    Exit Sub
    End If
    'Anwendung Word starten
    Set objApp = CreateObject("Word.Application")
    'Word sichtbar machen
    objApp.Visible = True
    If opt_Einfach.Value = True Then
    If Me.lst_TN_Auswahl.ListCount > 1 Then
    MsgBox "Nur einen Teilnehmer auswählen"
    objApp.Quit False   'Word schließen
    Exit Sub
    End If
    'ElseIf opt_Einfach.Value = True And Me.lst_TN_Auswahl.ListCount = 1 Then
    'Word-Dokument öffnen
    Set objDocument = objApp.documents.Open(Filename:=ThisWorkbook.Path _
    & "\" & "MF1.docx", ReadOnly:=True)
    With objDocument
    .Bookmarks("KurzBez").Range.Text = txt_KurzBez.Value
    .Bookmarks("KursNr").Range.Text = txt_KursNr.Value
    .Bookmarks("LangBez").Range.Text = cbx_LangBez.Value
    .Bookmarks("Name").Range.Text = lst_TN_Auswahl.List(0, 1)
    .Bookmarks("Vorname").Range.Text = lst_TN_Auswahl.List(0, 2)
    End With
    ElseIf opt_Mehrfach.Value = True Then
    'Word-Dokument öffnen
    Set objDocumentTab = objApp.documents.Open(Filename:=ThisWorkbook.Path _
    & "\" & "MF1_mehrTN.docx", ReadOnly:=True)
    With objDocumentTab
    .Bookmarks("KurzBez").Range.Text = txt_KurzBez.Value
    .Bookmarks("KursNr").Range.Text = txt_KursNr.Value
    .Bookmarks("LangBez").Range.Text = cbx_LangBez.Value
    'Tabellenbox in Textbox einer Objektvariablen zuweisen
    Set wdTab = objDocumentTab.Shapes("Textfeld 4").TextFrame.TextRange.Tables(1)
    End With
    With Me.lst_TN_Auswahl
    For iItem = .ListCount - 1 To 0 Step -1
    wdTab.Cell(2, 1).Range.Text = .List(iItem, 1)
    wdTab.Cell(2, 2).Range.Text = .List(iItem, 2)
    wdTab.Cell(2, 3).Range.Text = .List(iItem, 3)
    wdTab.Cell(2, 4).Range.Text = .List(iItem, 4)
    If iItem > 0 Then wdTab.Rows.Add Beforerow:=wdTab.Rows(2)
    Next iItem
    End With
    Else
    Exit Sub
    End If
    

    LG
    Peer
    Anzeige
    AW: mehrspaltige Listeneinträge geteilt Word
    14.04.2020 23:27:11
    fcs
    Hallo Peer,
    arrangiere die Prüfungen etwas anders, dann wird bei "einfach" und mehr als einem ausgewählten TN
    die Word-Anwendung nicht gestartet.
    LG
    Franz
    Private Sub btn_ToWord_Click()
    Dim objApp As Object
    Dim objDocument As Object
    Dim objDocumentTab As Object
    Dim iItem As Integer
    Dim wdTab As Object 'Word.Table
    If Me.opt_Einfach.Value = False And Me.opt_Mehrfach.Value = False Then
    MsgBox "Wähle ein Vorlage aus"
    Exit Sub
    End If
    If Me.lst_TN_Auswahl.ListCount = 0 Then
    MsgBox "Es sind noch keine Teilnehmer eingetragen"
    Exit Sub
    End If
    If opt_Einfach.Value = True And Me.lst_TN_Auswahl.ListCount > 1 Then
    MsgBox "Nur einen Teilnehmer auswählen"
    Exit Sub
    End If
    'Anwendung Word starten
    Set objApp = CreateObject("Word.Application")
    'Word sichtbar machen
    objApp.Visible = True
    If opt_Einfach.Value = True Then
    'Word-Dokument öffnen
    Set objDocument = objApp.documents.Open(Filename:=ThisWorkbook.Path _
    & "\" & "MF1.docx", ReadOnly:=True)
    With objDocument
    .Bookmarks("KurzBez").Range.Text = txt_KurzBez.Value
    .Bookmarks("KursNr").Range.Text = txt_KursNr.Value
    .Bookmarks("LangBez").Range.Text = cbx_LangBez.Value
    .Bookmarks("Name").Range.Text = lst_TN_Auswahl.List(0, 1)
    .Bookmarks("Vorname").Range.Text = lst_TN_Auswahl.List(0, 2)
    End With
    ElseIf opt_Mehrfach.Value = True Then
    'Word-Dokument öffnen
    Set objDocumentTab = objApp.documents.Open(Filename:=ThisWorkbook.Path _
    & "\" & "MF1_mehrTN.docx", ReadOnly:=True)
    With objDocumentTab
    .Bookmarks("KurzBez").Range.Text = txt_KurzBez.Value
    .Bookmarks("KursNr").Range.Text = txt_KursNr.Value
    .Bookmarks("LangBez").Range.Text = cbx_LangBez.Value
    'Tabellenbox in Textbox einer Objektvariablen zuweisen
    Set wdTab = objDocumentTab.Shapes("Textfeld 4").TextFrame.TextRange.Tables(1)
    End With
    With Me.lst_TN_Auswahl
    For iItem = .ListCount - 1 To 0 Step -1
    wdTab.Cell(2, 1).Range.Text = .List(iItem, 1)
    wdTab.Cell(2, 2).Range.Text = .List(iItem, 2)
    wdTab.Cell(2, 3).Range.Text = .List(iItem, 3)
    wdTab.Cell(2, 4).Range.Text = .List(iItem, 4)
    If iItem > 0 Then wdTab.Rows.Add Beforerow:=wdTab.Rows(2)
    Next iItem
    End With
    Else
    Exit Sub
    End If
    End Sub
    

    Anzeige
    AW: mehrspaltige Listeneinträge geteilt Word
    15.04.2020 07:29:37
    Peer
    Hallo Franz.
    Danke für deine Korrektur.
    Einen schönen Tag.
    LG
    Peer

    Links zu Excel-Dialogen

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige