Zum Inhalt wechseln


Foto

Active Directory Daten in Word


  • Bitte melde dich an um zu Antworten
31 Antworten in diesem Thema

#16 Praktik

Praktik

    Newbie

  • 16 Beiträge

 

Geschrieben 25. Januar 2012 - 09:39

Das Skript soll schon so sein wie es jetzt ist, nur soll es halt möglich sein es als Vorlage zu speichern, damit andere Vorlagen wieder auf diese Vorlage zugreifen können.

Leider ist das meiste was ich finde auf VBA bezogen und nicht auf VBS...

#17 Sunny61

Sunny61

    Expert Member

  • 22.238 Beiträge

 

Geschrieben 25. Januar 2012 - 10:16

Das Skript soll schon so sein wie es jetzt ist, nur soll es halt möglich sein es als Vorlage zu speichern, damit andere Vorlagen wieder auf diese Vorlage zugreifen können.

Leider ist das meiste was ich finde auf VBA bezogen und nicht auf VBS...


Vergiss es, das ist IMHO viel zu umständlich. Schreib die Werte in die Registry, lese sie in den Vorlagen aus. Wir haben hier ca. 80 Wordvorlagen, bei 20 wird das genauso gemacht, funktioniert einwandfrei.

wie kann ich Daten an Word übergeben? | MS Word & andere Textverarbeitung
VBA Tips: Word UserForms Part 1
Gruppenrichtlinien: http://www.gruppenrichtlinien.de/

#18 Praktik

Praktik

    Newbie

  • 16 Beiträge

 

Geschrieben 25. Januar 2012 - 10:27

Es soll aber so sein wie es jetzt ist damit die Datei in den anderen Vorlagen als AutoText verwendet werden kann. Und für Autotext muss die Datei halt .dotx sein. Kann doch nicht so schwer sein das in eine .dotx Datei umzuwandeln/zu speichern.

VBA kann es doch auch irgendwie:

FileFormat:=wdFormatXMLTemplate, 
CompatibilityMode:=14

Und diese Befehle sind nicht auf mein Skript anwendbar? Das Bezweifle ich.

Und jetzt soll ich das ganze Skript umändern damit es in die Registry schreibt? Vergiss es, das ist viel zu umständlich. Zumal ich es bei meinem Kollegen nicht durchkriegen würde.

Gruß
Praktik

-edit-

So ich habe es jetzt, ein einfaches (,14) ohne Klammern hinter dem Speicherpfad hat genügt um es als .dotx abspeichern zu können. Das war auch total umständlich - LOL

Jetzt soll der Text, der in dem Word Dokument steht noch als Autotext gespeichert werden damit er als Schnellbaustein zur Verfügung steht. Aber da kann mir hier wahrscheinlich auch wieder keine helfen ;)

Bearbeitet von Praktik, 25. Januar 2012 - 10:53.


#19 Sunny61

Sunny61

    Expert Member

  • 22.238 Beiträge

 

Geschrieben 25. Januar 2012 - 14:28

Es soll aber so sein wie es jetzt ist damit die Datei in den anderen Vorlagen als AutoText verwendet werden kann.


Genau sowas hab ich mir gedacht. Ihr macht euch nur unnötig das Leben schwer. Du kannst z.B. irgendeine *.DOTX oder *.DOTM mit allen benötigten Autotexten erstellen. Diese Datei kopierst dann beim Login des Benutzers in das Startup Verzeichnis von Word. Du kannst auch per GPO ein Startup Verezeichnis für Word vorgeben, dann ist das mit dem kopieren einfacher. Wenn Du jetzt Word startest, wird diese Vorlage gleich im Hintergrund mit gestartet. Siehst Du, wenn Du die AddOns bei Word aufrufst. Und schon hast Du alle Autotexte in Word zur Verfügung. Bei Veränderungen der Autotexte brauchst Du nur diese Datei zu verändern, schon ist alles erledigt.

Du versuchst krampfhaft eine Aufgabe mittels vorgegebenen Lösungsweg zu erledigen. Es gibt viele Wege nach Rom, in diesem Fall ist dein Weg der steinigere. Das glaubst Du jetzt noch nicht, spätestens wenn Du jede Woche etwas ändern musst, wirst Du an mich denken.

Und jetzt soll ich das ganze Skript umändern damit es in die Registry schreibt? Vergiss es, das ist viel zu umständlich. Zumal ich es bei meinem Kollegen nicht durchkriegen würde.


Die Registry ist genau für solche Zwecke gemacht worden, was soll daran falsch sein? Du kannst jederzeit von jedem Programm aus darauf zugreifen, brauchst keine Verbindung zu irgendwas. Glaubs mir, das ist um Welten besser als dieses Gehampel mit Textdateien schreiben und auslesen.

So ich habe es jetzt, ein einfaches (,14) ohne Klammern hinter dem Speicherpfad hat genügt um es als .dotx abspeichern zu können. Das war auch total umständlich - LOL


Danke für die Rückmeldung. ;)

Jetzt soll der Text, der in dem Word Dokument steht noch als Autotext gespeichert werden damit er als Schnellbaustein zur Verfügung steht. Aber da kann mir hier wahrscheinlich auch wieder keine helfen ;)


Schreibt der Benutzer den Text manuell rein oder ist der Text aus deinem Script? Wenn aus dem Script, dann wäre jetzt der richtige Zeitpunkt das ganz mit der Registry zu überlegen. :p


    'Pfad für das Schreiben in die Registry einstellen.
    regSchluessel  = "HKEY_CURRENT_USER\Software\VB and VBA Program Settings\Dokumentvorlagen\Benutzereinstellungen"

inRegSchreiben regSchluessel, "Benutzername", strName

'Diese Funktion schreibt Werte in die Registry.
Function inRegSchreiben(regSchluessel, regZeichenfolge, regWert)
    
    Dim WshShell
    Set WshShell = CreateObject("WScript.Shell")

    WshShell.RegWrite regSchluessel & "\" & regZeichenfolge, regWert
End Function


Such mal nach strName in dem von mir geposteten Script.
Gruppenrichtlinien: http://www.gruppenrichtlinien.de/

#20 ICEMAN69

ICEMAN69

    Junior Member

  • 120 Beiträge

 

Geschrieben 25. Januar 2012 - 14:32

Hallo,

probiers doch mal so:

erstell ein vbs mit folgendem Inhalt:

Set objSysInfo = CreateObject("ADSystemInfo")

strUser = objSysInfo.UserName
Set objUser = GetObject("LDAP://" & strUser)

Set objWord = CreateObject("Word.Application")
objWord.UserName = objUser.CN
objWord.UserAddress = objUser.Title & Chr(13) & _
objUser.Mail & Chr(13) & _
objUser.Telephonenumber & Chr(13) & _
objUser.facsimileTelephonenumber

objWord.Quit


Führe die Datei aus.
So werden in Word die Userdaten gefüllt.

In deiner Vorlage kannst du dann Steuerfelder mit dem Inhalt in deiner Vorlage einbetten.

#21 Sunny61

Sunny61

    Expert Member

  • 22.238 Beiträge

 

Geschrieben 25. Januar 2012 - 14:36

Führe die Datei aus.
So werden in Word die Userdaten gefüllt.

In deiner Vorlage kannst du dann Steuerfelder mit dem Inhalt in deiner Vorlage einbetten.


Wenn der Laptop ohne Kontakt zum AD neu gestartet wird, funktioniert das aber nicht. Und genau das soll aber funktionieren, hat er auch geschrieben.
Gruppenrichtlinien: http://www.gruppenrichtlinien.de/

#22 Praktik

Praktik

    Newbie

  • 16 Beiträge

 

Geschrieben 26. Januar 2012 - 08:09

Hallo Sunny,

vielen Dank für die Rückmeldungen. Wahrscheinlich habe ich den Wald vor lauter Bäumen schon nicht mehr gesehen :D

Ich werde deine Idee mal weitergeben, vielleicht ist es auch für uns die bessere Lösung, danke :)

Gruß
Praktik

PS @ICEMAN:
Genau so ein Skript habe ich schon, welches auch funktioniert aber trotzdem danke :)

#23 Praktik

Praktik

    Newbie

  • 16 Beiträge

 

Geschrieben 26. Januar 2012 - 14:00

Hey Sunny,

so richtig verstanden habe ich das ganze glaub ich noch nicht :D

Wie/wo läuft die verknüpfung der wordvorlage mit den infos in der registry? Sind deine Skripte jetzt VBS oder VBA?
Um die Zeichenbegrenzung zu umgehen, magst du mir eine PM schicken mit dem Skript, vielleicht verstehe ich es dann besser :)
Danke im Voraus.

Gruß
Praktik

#24 Sunny61

Sunny61

    Expert Member

  • 22.238 Beiträge

 

Geschrieben 26. Januar 2012 - 16:23

so richtig verstanden habe ich das ganze glaub ich noch nicht :D


Dachte ich mir schon. ;)

Wie/wo läuft die verknüpfung der wordvorlage mit den infos in der registry?


In der Wordvorlage werden per VBA Daten aus der Registry ausgelesen und an die Textstellen in die Wordvorlage geschrieben.

Z.B. wird der Benutzername, die Nebenstelle, die Faxnummer und die Mailadresse ausgelesen und in die dafür vorgesehenen Textfelder geschrieben.

Sind deine Skripte jetzt VBS oder VBA?


Die geposteten Scripte sind in VBS geschrieben.

Um die Zeichenbegrenzung zu umgehen, magst du mir eine PM schicken mit dem Skript, vielleicht verstehe ich es dann besser :)
Danke im Voraus.


In https://www.mcseboar...tml#post1131747 hab ich dir ein Script gepostet. Und in https://www.mcseboar...tml#post1131875 den zweiten Teil dazu. Pack einfach beide Teile in ein Script und lass es laufen. Wenn Du debuggen willst, dann kannst Du natürlich auch einen VBA Editor dafür verwenden, oder gleich eine richtige Scripting Entwicklungsumgebung. Du sollst es verstehen, da nützt dir ein fertiges Script nichts. Probier es aus, beachte allerdings auch diesen Satz von mir:

Die Function SAM2ADInfo hab ich nicht mitgepostet, die findest Du bei Nils auf der HP.


Gruppenrichtlinien: http://www.gruppenrichtlinien.de/

#25 Praktik

Praktik

    Newbie

  • 16 Beiträge

 

Geschrieben 26. Januar 2012 - 16:50

Aber "fehlt" nicht das letzte vba-script in der vorlage, das diese werte liest und als autotext definiert?

#26 Sunny61

Sunny61

    Expert Member

  • 22.238 Beiträge

 

Geschrieben 27. Januar 2012 - 07:41

Aber "fehlt" nicht das letzte vba-script in der vorlage, das diese werte liest und als autotext definiert?


Selbst willst Du wohl nichts machen? Registry lesen VBA: Registry mit VBA auslesen - - - - - - - - - Office-Loesung.de

Public Function ReadRegistryKey(strSchluessel As String) As String
On Error GoTo err_ReadRegistryKey:
        
    Dim strRC As String
    Dim objWSHShell As Object
    Set objWSHShell = CreateObject("WScript.Shell")
    strRC = objWSHShell.RegRead("HKEY_CURRENT_USER\Software\DeinSchlüssel\NocheinSchlüssel\" & strSchluessel)
    'MsgBox strRC
    ReadRegistryKey = strRC
    Set objWSHShell = Nothing

exit_ReadRegistryKey:
    Exit Function
err_ReadRegistryKey:
    If Err.Number = -2147024894 Then
        'MsgBox "Wert " & strSchluessel & " existiert nicht!"
    Else
        MsgBox "Fehler: " & Err.Number & " " & Err.Description & " " & mModName & ".ReadRegistryKey() As String"
    End If
    ReadRegistryKey = ""
    Resume exit_ReadRegistryKey
End Function
Public Function WriteRegistryKey(strSchluessel As String, strRegistryEintrag As String) As Boolean
On Error GoTo err_WriteRegistryKey:

    Dim objWSHShell As Object
    Set objWSHShell = CreateObject("WScript.Shell")
    objWSHShell.RegWrite "HKEY_CURRENT_USER\Software\DeinSchlüssel\NocheinSchlüssel\" & strSchluessel, strRegistryEintrag
    Set objWSHShell = Nothing
    WriteRegistryKey = True

exit_WriteRegistryKey:
    Exit Function
err_WriteRegistryKey:
    WriteRegistryKey = False
    MsgBox "Fehler: " & Err.Number & " " & Err.Description & " " & mModName & ".WriteRegistryKey(strSchluessel As String, strRegistryEintrag As String)"
    Resume exit_WriteRegistryKey
End Function
Public Function DeleteRegistryKey(strSchluessel As String) As Boolean
On Error GoTo err_DeleteRegistryKey:

    Dim objWSHShell As Object
    Set objWSHShell = CreateObject("WScript.Shell")
    objWSHShell.RegDelete ("HKEY_CURRENT_USER\Software\DeinSchlüssel\NocheinSchlüssel\" & strSchluessel)
    Set objWSHShell = Nothing
    DeleteRegistryKey = True

exit_DeleteRegistryKey:
    Exit Function
err_DeleteRegistryKey:
    DeleteRegistryKey = False
    If Err.Number <> -2147024894 Then 'Ungültige Wurzel in Registrierungsschlüssel "HKEY_CURRENT_USER\Software\DeinSchlüssel\NocheinSchlüssel". mdRegistry.DeleteRegistryKey()
        MsgBox "Fehler: " & Err.Number & " " & Err.Description & " " & mModName & ".DeleteRegistryKey()"
    End If
    Resume exit_DeleteRegistryKey
End Function

Mit Hilfe dieser code Beispiele solltest Du weiter kommen: VBA .:|:. Word mit VBA .:|:. Dokumentinhalte .:|:. Autotexte VBA for Word - Macro – Create or edit AutoText via VBA WD97D: Autotext aus globaler Vorlage per VBA einfügen
Gruppenrichtlinien: http://www.gruppenrichtlinien.de/

#27 Praktik

Praktik

    Newbie

  • 16 Beiträge

 

Geschrieben 27. Januar 2012 - 09:02

So ich habe jetzt ein Script gemacht und bearbeite es gerade, da habe ich noch ein paar Fragen :)

Mein Script fängt mit dem von Nils an, nun steht ja in der ersten Zeile
strLDAP = SAM2ADInfo("NilsK", "mail")
Irgendwo habe ich gelesen das man das NilsK natürlich ändern müsse aber in was? Und inwiefern spielt das eine Rolle?

Anschließend kommen deine Scripts. Muss ich im ersten Teil die Daten die aus dem AD ausgelesen werden noch von mir angepasst werden oder ist das egal weil ich das im 2. Script anpasse? Sehe ich das richtig, damit die entsprechenden Daten in die Registry geschrieben werden, muss es dann ungefähr so aus sehen:
inRegSchreiben regSchluessel, "Benutzername", strName
inRegSchreiben regSchluessel, "Ort", strOrt
inRegSchreiben regSchluessel, "mail", strMail
etc

Und in dem VBA Script steht:
("HKEY_CURRENT_USER\Software\DeinSchlüssel\NocheinSchlüssel\" & strSchluessel)

Da muss dann "DeinSchlüssel\NocheinSchlüssel" durch den Pfad im Registry Script ersetzt werden also "VB and VBA Program Settings\Dokumentvorlagen\Benutzereinstellungen"

Vielen Dank im Voraus :)

Gruß
Praktik

#28 Sunny61

Sunny61

    Expert Member

  • 22.238 Beiträge

 

Geschrieben 27. Januar 2012 - 09:33

So ich habe jetzt ein Script gemacht und bearbeite es gerade, da habe ich noch ein paar Fragen :)

Mein Script fängt mit dem von Nils an, nun steht ja in der ersten Zeile

strLDAP = SAM2ADInfo("NilsK", "mail")
Irgendwo habe ich gelesen das man das NilsK natürlich ändern müsse aber in was? Und inwiefern spielt das eine Rolle?


Schau dir das von mir in https://www.mcseboar...tml#post1131747 gepostete Script doch genau an. An dieses Script musst Du noch den Teil aus https://www.mcseboar...tml#post1131875 anfügen. Und dann natürlich noch die Function SAM2ADInfo aus faq-o-matic.net » Ein AD-Attribut zu einem Logon-Namen herausfinden ab Zeile 3.

Anschließend kommen deine Scripts. Muss ich im ersten Teil die Daten die aus dem AD ausgelesen werden noch von mir angepasst werden oder ist das egal weil ich das im 2. Script anpasse?


In dem Script aus https://www.mcseboar...tml#post1131747 lese ich den Benutzeranmeldenamen aus und hole mir alle Infos die ich benötige dazu aus dem AD mittels der Function SAM2ADInfo. Lies doch auch die Kommentare dazu im Script. IMHO ist das schon alles sprechend. Wenn Du Dinge wie den Vorgesetzten nicht brauchst, dann lass ihn einfach weg.

Sehe ich das richtig, damit die entsprechenden Daten in die Registry geschrieben werden, muss es dann ungefähr so aus sehen:

inRegSchreiben regSchluessel, "Benutzername", strName
inRegSchreiben regSchluessel, "Ort", strOrt
inRegSchreiben regSchluessel, "mail", strMail
etc


Richtig.

Und in dem VBA Script steht:

("HKEY_CURRENT_USER\Software\DeinSchlüssel\NocheinSchlüssel\" & strSchluessel)

Da muss dann "DeinSchlüssel\NocheinSchlüssel" durch den Pfad im Registry Script ersetzt werden also "VB and VBA Program Settings\Dokumentvorlagen\Benutzereinstellungen"


Wenn Du diesen Pfad verwenden möchtest, dann ja. Ich setze da lieber auf sprechende Schlüssel, wie z.B. DokumenteinstellungenWord oder ähnliches.

Vielen Dank im Voraus :)


Bitte, gern geschehen. ;)
Gruppenrichtlinien: http://www.gruppenrichtlinien.de/

#29 Praktik

Praktik

    Newbie

  • 16 Beiträge

 

Geschrieben 27. Januar 2012 - 10:05

So, ich glaube ich habe es jetzt. Ich habe das Script mal angehängt, es wäre echt super wenn du mal drüber gucken könntest ob das alles so korrekt ist.

Der Import in die Registry funktioniert, ich weiß nur nicht ob da noch etwas fehlerhaft ist das eventuell später zu Problemen führen könnte.
Nochmals vielen Dank :)

-edit-
Ich bin jetzt bei der Wordvorlage am überlegen, wie man am besten die Werte aus der Registry an eine bestimmte Stelle im Dokument bekommt. Über Textmarken oder gibt es eine andere Möglichkeit?

Ich habe hier zwar ein Script gefunden aber das geht nur wenn man eine Tabelle hat:
    Sub autoopen()
    Dim KeyValue1 As String
    Dim Key1 As String
    Dim Section1 As String
    Dim KeyValue2 As String
    Dim Key2 As String
    Dim Section2 As String
    Key1 = "Benutzername"
    Section1 = "HKEY_CURRENT_USER\Software\DokumenteinstellungenWord"
    KeyValue1 = System.PrivateProfileString("", Section1, Key1)
    Key2 = "TelNo"
    Section2 = "HKEY_CURRENT_USER\Software\DokumenteinstellungenWord"
    KeyValue2 = System.PrivateProfileString("", Section2, Key2)
    
    ActiveDocument.Fields(1).Update
    Set MyRange1 = ActiveDocument.Fields(1).Result
    MyRange1.Text = KeyValue1
    ActiveDocument.Fields(2).Update
    Set MyRange2 = ActiveDocument.Fields(2).Result
    MyRange2.Text = KeyValue2
    End Sub
Wie kann man das denn mit dem "ActiveDocument.Bookmarks" Befehl verbinden und sollte es auf AutoOpen oder AutoNew stehen?

Hier gibt es auch noch ein Script, bei dem aber auch etwas fehlt. Was dabei fehlt steht auch in dem Comment darunter, ich weiß nur nicht wo ich das einfügen soll^^:
http://stackoverflow...fined-bookmarks


Gruß
Praktik

Angehängte Dateien


Bearbeitet von Praktik, 27. Januar 2012 - 11:38.


#30 Sunny61

Sunny61

    Expert Member

  • 22.238 Beiträge

 

Geschrieben 27. Januar 2012 - 12:29

So, ich glaube ich habe es jetzt. Ich habe das Script mal angehängt, es wäre echt super wenn du mal drüber gucken könntest ob das alles so korrekt ist.


Du mußt den Anhang freischalten lassen.

Der Import in die Registry funktioniert, ich weiß nur nicht ob da noch etwas fehlerhaft ist das eventuell später zu Problemen führen könnte.
Nochmals vielen Dank :)


Ich seh mir das am WE an. Du mußt das natürlich ausführlich testen.

-edit-
Ich bin jetzt bei der Wordvorlage am überlegen, wie man am besten die Werte aus der Registry an eine bestimmte Stelle im Dokument bekommt. Über Textmarken oder gibt es eine andere Möglichkeit?


Textmarken verwenden wir auch. [VBA] Textmarken in Textfelder ansprechen @ tutorials.de: Tutorials, Forum & Hilfe sollte Klarheit schaffen.

Evtl. hilft dir das in die richtige Richtung:

    Selection.GoTo what:=wdGoToBookmark, Name:="Firma"
    Selection.TypeText "Hier fehlt die Firmenbez."

Anstatt den Text kannst Du hier den Inhalt deiner Variablen rein schreiben.

Ich habe hier zwar ein Script gefunden aber das geht nur wenn man eine Tabelle hat:

    Sub autoopen()
    Dim KeyValue1 As String
    Dim Key1 As String
    Dim Section1 As String
    Dim KeyValue2 As String
    Dim Key2 As String
    Dim Section2 As String
    Key1 = "Benutzername"
    Section1 = "HKEY_CURRENT_USER\Software\DokumenteinstellungenWord"
    KeyValue1 = System.PrivateProfileString("", Section1, Key1)
    Key2 = "TelNo"
    Section2 = "HKEY_CURRENT_USER\Software\DokumenteinstellungenWord"
    KeyValue2 = System.PrivateProfileString("", Section2, Key2)
    
    ActiveDocument.Fields(1).Update
    Set MyRange1 = ActiveDocument.Fields(1).Result
    MyRange1.Text = KeyValue1
    ActiveDocument.Fields(2).Update
    Set MyRange2 = ActiveDocument.Fields(2).Result
    MyRange2.Text = KeyValue2
    End Sub
Wie kann man das denn mit dem "ActiveDocument.Bookmarks" Befehl verbinden und sollte es auf AutoOpen oder AutoNew stehen?


Dies sollte die Lösung sein. [VBA] Textmarken in Textfelder ansprechen @ tutorials.de: Tutorials, Forum & Hilfe

Hier gibt es auch noch ein Script, bei dem aber auch etwas fehlt. Was dabei fehlt steht auch in dem Comment darunter, ich weiß nur nicht wo ich das einfügen soll^^:
vbscript - Word - Insert data from registry into predefined bookmarks - Stack Overflow


Ist doch auch klar, es wird das komplette Array eingefügt. Definiere sValue doch mal mit "Heute ist Freitag" und lass die For-Schleife weg. Was wird jetzt eingetragen?
Gruppenrichtlinien: http://www.gruppenrichtlinien.de/