Praktik 10 Geschrieben 25. Januar 2012 Autor Melden Teilen Geschrieben 25. Januar 2012 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... Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 25. Januar 2012 Melden Teilen Geschrieben 25. Januar 2012 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 Zitieren Link zu diesem Kommentar
Praktik 10 Geschrieben 25. Januar 2012 Autor Melden Teilen Geschrieben 25. Januar 2012 (bearbeitet) 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 25. Januar 2012 von Praktik Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 25. Januar 2012 Melden Teilen Geschrieben 25. Januar 2012 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. Zitieren Link zu diesem Kommentar
ICEMAN69 10 Geschrieben 25. Januar 2012 Melden Teilen Geschrieben 25. Januar 2012 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. Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 25. Januar 2012 Melden Teilen Geschrieben 25. Januar 2012 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. Zitieren Link zu diesem Kommentar
Praktik 10 Geschrieben 26. Januar 2012 Autor Melden Teilen Geschrieben 26. Januar 2012 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 :) Zitieren Link zu diesem Kommentar
Praktik 10 Geschrieben 26. Januar 2012 Autor Melden Teilen Geschrieben 26. Januar 2012 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 Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 26. Januar 2012 Melden Teilen Geschrieben 26. Januar 2012 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. Zitieren Link zu diesem Kommentar
Praktik 10 Geschrieben 26. Januar 2012 Autor Melden Teilen Geschrieben 26. Januar 2012 Aber "fehlt" nicht das letzte vba-script in der vorlage, das diese werte liest und als autotext definiert? Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 27. Januar 2012 Melden Teilen Geschrieben 27. Januar 2012 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 Zitieren Link zu diesem Kommentar
Praktik 10 Geschrieben 27. Januar 2012 Autor Melden Teilen Geschrieben 27. Januar 2012 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 Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 27. Januar 2012 Melden Teilen Geschrieben 27. Januar 2012 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. ;) Zitieren Link zu diesem Kommentar
Praktik 10 Geschrieben 27. Januar 2012 Autor Melden Teilen Geschrieben 27. Januar 2012 (bearbeitet) 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 27. Januar 2012 von Praktik Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 27. Januar 2012 Melden Teilen Geschrieben 27. Januar 2012 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? Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.