Serienbrief Datenspalten per ComboBox auswählen?

  • Word

Es gibt 25 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Jetzt verstehe ich auch, was du ungefähr willst.
    Dir geht es zunächst nur um die Spalte Oberordner

    Visual Basic-Quellcode

    1. Sub Oberordner_starten()
    2. Dim strPfad As String, Merge As MailMerge, Fields As String
    3. Selection.Delete Unit:=wdCharacter, Count:=1 'wofür immer das gut sein mag
    4. Set Merge = ActiveDocument.MailMerge
    5. Merge.Fields.Add Range:=Selection.Range, Name:="Oberordner"
    6. Merge.ViewMailMergeFieldCodes = wdToggle
    7. strPfad = ActiveDocument.Path & Application.PathSeparator & Left(ActiveDocument.Name, Len(ActiveDocument.Name) - 4) & "xls"
    8. MySqlStatement = "SELECT Oberordner FROM `Datenimport$` WHERE Oberordner <> """" "
    9. Merge.OpenDataSource Name:=strPfad, ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, Format:=wdOpenFormatAuto, SqlStatement:=MySqlStatement '...
    10. If Merge.State = wdMainAndDataSource Then Merge.Execute
    11. End Sub

    Wenn du die anderen Spalten auch durchlaufen willst, dann musst du die Spaltennamen in ein Array packen und in einer Schleife durchlaufen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Ganz großes Kino! So habe ich es mir vorgestellt. Vielen Dank schonmal!
    2 Dinge noch, es wird automatisch ein neues Fenster mit dem Serienbrief geöffnet, kann ich das unterbinden.
    Alternativ habe ich jetzt ein uncharmantes "ActiveDocument.Close wdDoNotSaveChanges" eingebaut, was natürlich den Bildschirm kurz flackern lässt. Unsauber eben.
    Als zweites würde ich gern noch die Fehlermeldung abfangen, wenn die ausgewählte Unterebene keinen Inhalt hat.
    Ich dachte da an...

    Quellcode

    1. If Merge.DataSource.DataFields("Oberordner").Value = "" Then
    2. MsgBox "Diese Ebene hat keinen Inhalt", vbInformation

    Das funktioniert allerdings nicht.

    MfG Madde

    Madde schrieb:

    If Merge.DataSource.DataFields("Oberordner").Value = "" Then
    Suchst du sowas:

    Visual Basic-Quellcode

    1. ​If Merge.DataSource.RecordCount = 0 Then


    Im übrigen könnte es auch sein, dass dein ursprüngliches Problem auch mit dem Parameter SuppressBlankLines behoben wäre.

    Wenn du dich mit MailMerge befasst, solltest du eh diese Doku mal ausführlich studieren.
    Da gibt's bestimmt noch viele Parameter, mit denen du spielen kannst, um den gewünschten Erfolg zu erzielen.
    Nachschlagen geht schneller als fragen. Und ist effizienter.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Dank Deiner Hilfe konnte ich das Thema zu einem erfolgreichen Abschluß bringen.
    Nochmals Danke dafür!

    Die MailMerge-Eigenschaft bin ich auch mal durchgegangen aber da muss ich noch etwas mehr Zeit aufbringen.
    Eine Frage hätte ich noch zum Schluß, wäre es generell möglich den immer aktuell geladenen Record in einer Listbox auf der Userform anzuzeigen?
    Praktisch nur nochmal als Prüfung, ob der richtige Bereich gewählt wurde.

    MfG Madde

    Madde schrieb:

    wäre es generell möglich den immer aktuell geladenen Record in einer Listbox auf der Userform anzuzeigen?
    Ich glaube nicht, dass die MailMerge.Execute eine Progress-Methode hat, die den Aufrufer per Callback oder Event informiert.
    Aber wenn du eine Möglichkeit findest, kannst du es hier gerne veröffentlichen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --