Word-VBA - Externe Datenquelle aus Excel mit GetUser abfragen durch SVERWEIS/VLOOKUP

  • Word

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von Eierlein.

    Word-VBA - Externe Datenquelle aus Excel mit GetUser abfragen durch SVERWEIS/VLOOKUP

    Hallo werte Forengemeinschaft!

    Das vor kurzem gelöste Thema UserForm - Angemeldeten Benutzer erkennen office-loesung.de/ftopic518739_0_0_asc.php möchte nun verfeinert werden.

    Das Modul, welches den angemeldeten Benutzer erkennt und die entsprechenden Daten dazu liefert sieht so aus:

    Code:Public Function GetUser() As String
    GetUser = Environ("Userprofile")
    End Function

    Public Function UserAnrede() As String
    If GetUser = "C:\Users\JAK" Then UserAnrede = "Herr"
    End Function

    Public Function UserVorname() As String
    If GetUser = "C:\Users\JAK" Then UserVorname = "Tim"
    End Function

    Public Function UserNachname() As String
    If GetUser = "C:\Users\JAK" Then UserNachname = "Jakobi"
    End Function

    Public Function UserNachnameshort() As String
    If GetUser = "C:\Users\JAK" Then UserNachnameshort = "Jak"
    End Function

    Public Function UserFunktion() As String
    If GetUser = "C:\Users\JAK" Then UserFunktion = "Tellerwäscher"
    End Function

    Public Function UserEmail() As String
    If GetUser = "C:\Users\JAK" Then UserEmail = "tijakobi@bla.de"
    If GetUser = "C:\Users\PET" Then UserEmail = "alpetri@bla.de"
    If GetUser = "C:\Users\KOP" Then UserEmail = "hakoppner@bla.de"
    End Function

    Public Function UserEmailshort() As String
    If GetUser = "C:\Users\JAK" Then UserEmailshort = "tijakobi"
    End Function

    Public Function UserTel() As String
    If GetUser = "C:\Users\JAK" Then UserTel = "030 12 00 34 - 56"
    End Function

    Public Function UserTelshort() As String
    If GetUser = "C:\Users\JAK" Then UserTelshort = "56"
    End Function


    Heißt, dass alle abhängigen Daten also manuell im Modul eingetragen werden müssen. Jedoch ist der Datensatz um das Vielfache gestiegen.

    Ich frage mich, ob es eine auf einer Excel Datenbank basierte Lösung zu diesem Problem gibt. Vorstellbar wäre doch eine Excel-Tabelle mit den entsprechenden Zeilen und Spalten

    A B C D
    1 User Anrede Vorname Nachname
    2 JAK Herr Tim Jakobi
    3 PET Herr Kai Petri

    Sodass das VBA Modul durch
    Code:Public Function GetUser() As String
    GetUser = Environ("Userprofile")
    End Function

    den Benutzer erkennt und dann den erkannten Benutzernamen (in diesem Fall "JAK") in der Exceltabelle sucht.

    Quasi ein SVERWEIS...

    Ich habe mich einmal daran versucht... leider funktioniert es noch nicht so wie es soll:


    Code:Public Function GetUser() As String
    GetUser = Environ("Username")
    End Function

    Public Function UserAnrede() As String
    UserAnrede = Application.VLookUp(GetUser, Workbooks("Y:\JAK\Basisdaten\PL05.04.2012.xlsx", Worksheets(" _BPL").Range("A2:R83"), 2, False))
    End Function

    Public Function UserVorname() As String
    UserVorname = Application.VLookUp(GetUser, Workbooks("Y:\JAK\Basisdaten\PL05.04.2012.xlsx", Worksheets("BPL").Range("A2:R83"), 3, False))
    End Function

    Public Function UserNachname() As String
    UserNachname = Application.VLookUp(GetUser, Workbooks("Y:\JAK\Basisdaten\PL05.04.2012.xlsx", Worksheets("BPL").Range("A2:R83"), 4, False))
    End Function
    Das klappt aber definitv nicht... mein zweiter Versuch sah dann so aus:

    Code:
    Public Function GetUser() As String
    GetUser = Environ("Username")
    End Function

    Public Function Verweis()
    Verweis = _
    "=VLOOKUP(""jak"",'Y:\JAK\Basisdaten\[PL05.04.2012.xlsx]BPL'!R2C1:R83C19,4,FALSE)"
    End Function

    Public Function UserAnrede() As String
    UserAnrede = _
    "=VLOOKUP(GetUser,[Y:\JAK\Basisdaten\PL05.04.2012.xlsx]BPL!R2C:R83C[18],2,FALSE)"
    End Function

    Public Sub Try()
    .Formular = _
    "=VLOOKUP(""jak"",'C:\Users\TIMME\Documents\JAK\Basisdaten\[PL05.04.2012.xlsx]BPL'!R2C1:R83C19,4,FALSE)"
    End Sub


    Das haut auch hinten und vorne nicht hin... Nicht wundern: Das sind schlichtweg nur drei Versuche. Beim ersten und zweiten habe ich den GetUser durch den Text "jak" ersetzt, da bei GetUser ja Quasi das gleiche rauskäme. Dabei wollte ich schlichtweg nur eine Fehlerquelle vermeiden.Leider bekomm' ich's einfach nicht hin einen Verweis auf die externe Datenquelle zu schreiben. PS: Die Datenquelle sollte dazu nicht geöffnet werden müssen.
    Ich wäre wirklich verdammt dankbar, da kein einziges Forum und kein Googleergebnis - mit welchem Suchphrasen auch immer - dazu etwas auspuckt... oder ich mich einfach viel zu dumm anstelle. Aber im letzteren Fall bitte ich alle mir zu sagen warum ich mich dumm anstelle und um eine Lösung. Bin am verzweifeln.Vielen Dank im Voraus und frohe Ostern!Gruß Schorchi
    Vorstellbar wäre doch eine Excel - Tabelle mit den entsprechenden Zeilen und Spalten


    Vorstellbar ist das schon. Ich würde die Daten in einer CSV - Datei speichern.( Kannst du auch mit Excel bearbeiten).

    Quellcode

    1. Beispiel: user.csv
    2. User;Anrede;Vorname;Nachname
    3. JAK;Herr;Tim;Jakobi
    4. PET;Herr;Kai;Petri


    Abfragen kannst du die so:

    Visual Basic-Quellcode

    1. DIM zeile AS STRING
    2. DIM arr() AS STRING
    3. OPEN "c:\pfad\user.csv" FOR INPUT AS #1
    4. DO WHILE NOT EOF( 1 )
    5. LINE INPUT #1, zeile
    6. IF INSTR( zeile, getuser ) THEN
    7. arr() = split( zeile, ";" )
    8. user = arr( 0 )
    9. Anrede = arr( 1 )
    10. Vorname = arr( 2 )
    11. Nachname = arr( 3 )
    12. EXIT DO
    13. END IF
    14. LOOP
    15. CLOSE


    PS: Die Datenquelle sollte dazu nicht geöffnet werden müssen.

    Ohne öffnen kommst du nicht an die Daten.