Dauerhafte benutzerbezogene Datensatzfilterung im Seriendruck mittels VBA (MailMerge-Objekt)

  • Word

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

    Dauerhafte benutzerbezogene Datensatzfilterung im Seriendruck mittels VBA (MailMerge-Objekt)

    Hallo zusammen,

    ein Seriendruck bzw die Vorlage dazu öffne ich über ein Excel Workbook. Dabei stellt die Worddatei beim öffnen mittels VBA direkt die Verbindung zu der Datenbank her und filtert die Datensätze nach einem Status aus (In Diskussion). Das funktioniert soweit auch alles prima.

    Jetzt würde ich gerne direkt beim Start alle Datensätze filtern und nur die Anzeigen, die für den aktuell angemeldeten Benutzer bestimmt sind. In Sharepoint kann ich mit der Anweisung [Me] auch
    nur Datensätze anzeigen die für den angemeldeten Windowsbenutzer interessant sind. Geht sowas auch mit VBA? Bzw wie kann ich den Filter so setzen, das er nur nach
    angemeldeten User filtert. Manuel geht es ja auch....

    Im Endeffekt lässt sich die Frage herunterbrechen auf: Wie lese ich den angemeldeten Benutzer aus und setze nach ihm den Filter innerhalb VBA bzw. MailMerge?


    Hier soweit mein Code:

    Quellcode

    1. Sub AutoOpen()
    2. ActiveDocument.MailMerge.MainDocumentType = wdFormLetters
    3. ActiveDocument.MailMerge.OpenDataSource Name:= _
    4. "C:\xxxx\yyyyy\zzzzz\Arbeitspakete.xlsm" _
    5. , ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
    6. AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
    7. WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
    8. Format:=wdOpenFormatAuto, Connection:= _
    9. "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=C:\xxxx\yyyyy\zzzzz\Arbeitspakete.xlsm;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System datab" _
    10. , SQLStatement:="SELECT * FROM `Arbeitspakete$` WHERE Arbeitspaketstatus = 'In Diskussion'", SQLStatement1 _
    11. :="", SubType:=wdMergeSubTypeAccess
    12. ActiveDocument.MailMerge.ViewMailMergeFieldCodes = wdToggle
    13. End Sub

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „FrankyWill“ ()

    Vielen Dank dafür schonmal, ist schonmal die richtige Richtung. Allerdings gibt er mir damit den Benutzer Accountname wieder, ich möchte den Benutzername...an einem Beispiel ist es besser zu verstehen:

    Er gibt mir aus: XMUSMA was der Benutzeraccount ist, mit dem ich mich bei Windowsstart anmelde. der XMUSMA gehört Max Mustermann, der Name, der dann auch angezeigt wird wenn ich unter Windows auf den Startbutton klicke. Das ist auch der Name, den ich im Seriendruck brauche um nach ihm zu filtern.

    Hoffe ist verständlich...

    EDIT: Um es noch etwas verständlicher zu machen:

    Ich möchte mit:

    Quellcode

    1. SQLStatement:="SELECT * FROM `Arbeitspakete$` WHERE Benutzer = ??????


    den aktuell angemeldeten Benutzer (Max Mustermann) mittels Variable filtern....

    In Excel konnte ich den angmeldeten Benutzer auslesen mit der Excel4 Makrofunktion: =DATEI.ZUORDNEN(36)

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „FrankyWill“ ()

    FrankyWill schrieb:

    ich möchte den Benutzername
    ​Application.UserName
    Das ist aber ein ganz heißes Eisen, da der Benutzer das frei verändern kann.
    Sinnvoller ist meist, wenn man sich ein Dictionary selbst erstellt, das den Namen vom Account ableitet.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Ok, das ist der Benutzername den ich haben möchte, vielen Dank soweit. Da ich hier an etwas für die Firma arbeite ist es nicht möglich das der Benutzer das frei verändern kann, also denke ich dass das völlig ausreichend so ist.

    Könntest du mir konkret in dem unten stehenden Code helfen, wie ich das zu programmieren habe? Ich schaffe es einfach nicht diesen zweiten Filter zu programmieren. Es öffnen sich bei mir immer folgende Fenster:

    Wobei hier die Datei Arbeitspakete.xls garnicht existiert und ich mir nicht erklären kann woher das kommt...



    Quellcode

    1. Sub AutoOpen()
    2. 'Deklaration des Pfades zur Exceldatei, die sich im selben Verzeichnis befinden muss wie die Worddatei
    3. Exceldatei_Pfad = ActiveDocument.Path & "\Uebersicht_Arbeitspakete.xlsm"
    4. Benutzer = Application.UserName
    5. 'Makro sorgt für Datenbankverbindung
    6. ActiveDocument.MailMerge.MainDocumentType = wdFormLetters
    7. ActiveDocument.MailMerge.OpenDataSource Name:= _
    8. Exceldatei_Pfad _
    9. , ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
    10. AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
    11. WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
    12. Format:=wdOpenFormatAuto, Connection:= _
    13. "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=Exceldatei_Pfad;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System datab" _
    14. , SQLStatement:="SELECT * FROM `UebersichtArbeitspakete$` WHERE Arbeitspaketstatus = 'In Diskussion'", SQLStatement1 _
    15. :="SELECT * FROM `UebersichtArbeitspakete$` WHERE LC Engineer = Benutzer", SubType:=wdMergeSubTypeAccess
    16. ActiveDocument.MailMerge.ViewMailMergeFieldCodes = wdToggle
    17. End Sub

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „FrankyWill“ ()

    SQL-Abfrage

    1. "SELECT * FROM `UebersichtArbeitspakete$` WHERE `LC Engineer` = '" & Application.UserName & "'"
    Wobei ich keine Ahnung habe ob die BackQuotes bei OLEDB auch funktionieren.
    Ich dachte immer, da wird mit eckigen Klammern gearbeitet.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

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