Jump to content

Active Directory Daten in Word


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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

Link zu diesem Kommentar

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
Link zu diesem Kommentar
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.

Link zu diesem Kommentar

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.

Link zu diesem Kommentar

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 :)

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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.mcseboard.de/windows-forum-scripting-71/active-directory-daten-word-2-183650.html#post1131747 hab ich dir ein Script gepostet. Und in https://www.mcseboard.de/windows-forum-scripting-71/active-directory-daten-word-2-183650.html#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.

Link zu diesem Kommentar
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

Link zu diesem Kommentar

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

Link zu diesem Kommentar
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.mcseboard.de/windows-forum-scripting-71/active-directory-daten-word-2-183650.html#post1131747'>https://www.mcseboard.de/windows-forum-scripting-71/active-directory-daten-word-2-183650.html#post1131747 gepostete Script doch genau an. An dieses Script musst Du noch den Teil aus https://www.mcseboard.de/windows-forum-scripting-71/active-directory-daten-word-2-183650.html#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.mcseboard.de/windows-forum-scripting-71/active-directory-daten-word-2-183650.html#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. ;)

Link zu diesem Kommentar

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.com/questions/807266/word-insert-data-from-registry-into-predefined-bookmarks

 

 

Gruß

Praktik

BenutzerdatenV4.zip

bearbeitet von Praktik
Link zu diesem Kommentar
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?

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...