Word: Registry-Wert einfügen

FreNZeN

Cadet 4th Year
Registriert
Feb. 2006
Beiträge
81
Hi Leute,

ich würde im Word 2003 gerne ein Feld (mit Strg u. F9 erstellt) einfügen, das mir einen bestimmten Wert aus der Registry anzeigt.

Beispielsweise den Logon User Name des Explorers, der unter
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer steht.

Kann ich diesen Wert über ein einfaches Feld im Word anzeigen lassen, wenn möglich ohne Script??

Das ganze sollte in etwa so funktionieren wie die Benutzerinformationen von Word. Die kann ich als Feld ja auch einfügen und sie sind auch in der Registry hinterlegt.

Danke schon mal im voraus.

greetZ
FreNZeN
 
Wenn Du den Reiter der Benutzerinformationen in den Optionen meinst, der steht nicht in der Registry sondern in den Optionen. Alles andere aus der Reg musst Du zuerst auslesen mittels einem Script.
Für alle weiteren Infos in Word ist das Programm >> Zubehör >> Systemprogramme >> "Systeminformationen" zuständig, was Du extra laden musst, bei Word gibt es dazu wohl unter Infos einen Button, der dieses Programm aufruft.
 
Hi werkam,

danke erstmal vorweg.

werkam schrieb:
Wenn Du den Reiter der Benutzerinformationen in den Optionen meinst, der steht nicht in der Registry sondern in den Optionen...

Prinzipiell hast du schon Recht mit der Aussage, allerdings hinterlegt Word die Werte, die ich bei den Benutzerinformationen eintrage, auch in der Registry. Den Pfad dorthin hab ich bereits gefunden. Theoretisch kann ich den Wert auch in der Registry verändern.


Für alle weiteren Infos in Word ist das Programm >> Zubehör >> Systemprogramme >> "Systeminformationen" zuständig, was Du extra laden musst, bei Word gibt es dazu wohl unter Infos einen Button, der dieses Programm aufruft.

Das werd ich bei Gelegenheit mal testen, aber gut wärs natürlich, wenns auch ohne ein weiteres Programm funktionieren könnte.

Haste noch ne andere Idee? Bzw. jemand anderer ne Idee? :)

Gruß
FreNZeN
 
Kann ein Makro für Excel anbieten. Vielleicht ist das auch eine Option für Dich:
Code:
Sub Registry_auslesen()
   Range("A1").Value = ReadKey("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Logon User Name")
End Sub
Public Function ReadKey(ByVal strKey As String) As Variant
   Dim WSHShell As Object
 
   Set WSHShell = CreateObject("WScript.Shell")
   ReadKey = WSHShell.RegRead(strKey)
   Set WSHShell = Nothing
End Function

//EDIT : wenn das Makro statt Registry_auslesen einfach auto_open umbenannt wird, dann wird das Makro automatisch beim Öffnen ausgeführt.
Bin grad dabei, das Makro auf Word anzupassen. Braucht noch Zeit.
 
Zuletzt bearbeitet:
Guten Morgen ryan_blackdrago,

hab mich gerade mal bissle umgesehen und bin auf folgendes Script gestoßen (wollte ja ursprünglich kein Script nehmen, da ich mich damit leider überhaupt nicht auskenne):

Code:
Sub REG1()
Dim KeyValue As String
Dim Key As String
Dim Section As String
    'zum Beispiel:
    Key = "logon user name"
    Section = "KEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer"
    KeyValue = System.PrivateProfileString("", Section, Key)
    MsgBox KeyValue
End Sub 'Reg()

Durch "MsgBox KeyValue" wird aber leider nur eine kleine Infobox beim Ausführen des Makros geöffnet. Der Wert sollte allerdings in einem Feld ausgegeben werden. Hast du da evtl. ne Lösung parat?

Vielen Dank nochmal

Gruß
FreNZeN
 
wunderbar - vielen Dank :)

Und jetzt noch eine Frage, und zwar: Wie bekomme ich es jetzt noch hin, dass sich das Feld automatisch aktualisieren lässt, bzw. das Makro in einem Funktionsfeld ausgegeben wird, das sich bei Drücken der Taste F9 aktualisiert?
 
Da gibt's mehrere Möglichkeiten:

1. Möglichkeit : Makro automatisch beim Öffnen ausführen.
Wenn das Makro in autoopen umbenannt wird (statt reg1), wird es automatisch beim Öffnen ausgeführt. Hierdurch kann man z.B. eine Art Log-Datei realisieren (wie oft, von wem die Datei geöffnet wurde).

2. Möglichkeit : Makro per Menüpunkt / Symbolleiste ausführen
Extras > Anpassen > Speichern in : Dateinamen auswählen > Makros > Project.NewMacros.registry in die Symbolleiste ziehen + entsprechen formatieren (evtl. Tastenkombination vergeben)

3. Möglichkeit : Makro direkt in das Formular einfügen
http://www.wbrnet.info/db/9909-word-makro-button.html
 
Danke für die Vorschläge.

Alle drei Möglichkeiten beziehen sich aber darauf, dass der Wert bereits in einem Feld steht.
Das Problem an meinem Makro ist aber, dass der Wert nicht als Text in einem Funktions-Feld, sondern als einfacher Text, eingefügt wird. Der Wert aktualisiert sich also auch nicht, wenn ich den Text markiere und die, in Word für Felder aktualisieren verwendete, F9 Taste drücke.

Haste vielleicht dazu noch nen Lösungsvorschlag?

Edit: Ich werd mir die Seite bei Punkt 3 heute abend noch genauer ansehen, vllt. komm ich da ja noch auf meine gewünschte Lösung. Für weitere Vorschläge bin ich dennoch dankbar :)
 
Zuletzt bearbeitet:
Das Makro fügt genau den Wert ein, welcher gerade drinnensteht. Steht nichts drinnen, dann wird auch nur ein 'leerer String' eingefügt. Das Makro als Button irgendwo einfügen und dies dann drücken. Makros können auch als Tastenkombination erstellt werden (es muß daher nicht immer F9 sein)

Ich hätte da noch einen Lösungsvorschlag : Füge eine Tabelle ein und benutze folgenden Code. Hierdurch wird in eine bestimmte Zelle immer der Wert beim Ausführen des Makros überschrieben (und nicht hinten drangehängt) :
Code:
Sub registry()
Dim KeyValue As String
Dim Key As String
Dim Section As String
   Key = "logon user name"
    Section = "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer"
    KeyValue = System.PrivateProfileString("", Section, Key)
    Set wordtab = Word.ActiveDocument.Tables(2)
    wordtab.Cell(1, 3).Select
    Word.Selection.Text = KeyValue
End Sub

Set wordtab = Word.ActiveDocument.Tables(2)
Word sucht sich die zweite Tabelle ; (1) = erste Tabelle ; (2) = zweite Tabelle, usw.

wordtab.Cell(2, 3).Select
Word schreibt den Wert in die Zelle der Spalte 3 + Zeile 2
 
Zuletzt bearbeitet:
Danke nochmals :) auch für die Geduld mit mir *g
Hatte gestern leider nicht mehr die Zeit alles auszuprobieren...

Das Makro fügt genau den Wert ein, welcher gerade drinnensteht.

Das ist durchaus klar, aber ich möchte, dass ich das Makro nicht selbst ausführe, sondern dass es automatisch geschieht und immer an der selben Stelle, in dem Fall in einer Tabelle.
Autoopen hab ich probiert, mein Wert wurde dadurch allerdings nicht verändert. Ich hab dazu ein Dokument erstellt, das Makro eingebaut, den Wert eingefügt und das Dokument abgespeichert. Anschließend wurde der Wert aus der Reg verändert und das Dokument erneut gestartet. Der Wert blieb gleich.

Ich hätte da noch einen Lösungsvorschlag : Füge eine Tabelle ein und benutze folgenden Code.

Wäre hierfür ne sehr interessante Lösung; Problem daran ist nur, dass ich nicht davon ausgehen kann, dass es immer die zweite Tabelle ist (insofern ne weitere Tabelle eingefügt werden würde).

Mal noch ne andere Möglichkeit, die mir eingefallen ist, die ich aber leider nicht umsetzen kann:
Wäre es möglich, dass der ausgegebene Wert aus der Registry als Variable eingefügt oder unter Datei-Eigenschaften-Anpassen-(Eigener Name) eingetragen wird?

Achja, die Sache ist die, dass ich eine Vorlage erstellen möchte, die sich Ihre Standardwerte immer aus der Registry holt. Die Registry-Werte jedes Rechners werden über ein Login-Script bereits bei der Anmeldung eingetragen.

Grüße und nochmal vielen Dank bis dahin :)
FreNZeN
 
Zuletzt bearbeitet:
Zum Verständnis : Du möchtest den aktuell, angemeldeten User über 'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Logon User Name' einfügen?
1) Es wird mit Sicherheit nicht funktionieren, wenn dieser händisch in der Registierung abgeändert wird. Ohne Neustart läuft da wohl nix. Es wird aber trotzdem nicht funktionieren, da sich das aktuelle Benutzerkonto wieder reinschreiben wird.
2) Wenn Du mit 'Meister_Lampe' angemeldet bist + die Datei geöffnet wird, so wird Meister_Lampe auch eingefügt (würde als Beispiel in der o.g. registry stehen). Wird die Datei geschlossen + nochmals geöffnet, was wird wohl nun eingefügt? Meister_Lampe! Oh, Office-Makro.. Du lässt uns nie im Stich.
3) Mit der zweiten Tabelle. Dir ist schon klar, daß das Makro auf Deine Datei angepasst werden muß? Die zweite Tabelle ist nur exemplarisch gewesen.

Habe die Datei gerade mit einem Kollegen durchgetestet. Funktioniert einwandfrei.
 

Anhänge

Zuletzt bearbeitet:
Morgen erstmal :)

zu Punkt 1) Das mit dem Logon User Name war nur als Beispiel gedacht, im Nachhinein, muss ich sagen, war es ein doofes Beispiel, da der REG natürlich immer nur den angemeldeten Benutzernamen da reinschreibt.
Kurz noch zum Thema: Ich habe bei HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Common\UserInfo einen neuen Registry-Eintrag über ein Login-Script hinterlegt (Beispiel: hier gibt es beispielsweise den Eintrag UserName, ich erstelle zusätzlich UserTel). Dieser verändert sich natürlich, je nach Nutzeranmeldung.

zu Punkt 2) Durchaus klar. Mein Problem liegt mittlerweile nur noch darin, dass ich Selection.TypeText (KeyValue) in einem autoopen-Makro zwar ausführen kann, allerdings kann ich dem Makro nicht zuordnen, wo der Text eingefügt werden soll. Zusätzlich dazu fügt das Makro den Text lediglich ein weiteres mal ein, anstatt den „Alt-Wert“ zu überschreiben.

zu Punkt 3) Jo, das ist ebenfalls klar, auch dein Makro in der angehängten Datei ist gut nachvollziehbar. Aber, wie ich bereits geschrieben habe, muss nicht immer die zweite Tabelle (ich nehm’ jetzt als Beispiel einfach auch mal die zweite Tabelle) diese sein, welche den Wert erhalten soll.
Beispiel: Ich habe eine Vorlage mit zwei Tabellen. Der Wert wird nun automatisch in Tabelle 2 eingefügt. Der User erstellt zwischen Tabelle 1 u. Tabelle 2 eine weitere Tabelle und speichert das Dokument (soweit klappt alles wunderbar, da das Makro ja nur beim Start der Vorlage ausgeführt wird). Nun fällt ihm auf, dass ein Tippfehler im Dokument ist und öffnet die Datei erneut. Jetzt greift das Makro wieder und fügt den Wert in der neu erstellten Tabelle ein.

Die Lösung mit den Tabellen ist eigentlich schon klasse, funktioniert aber in diesen Fällen nicht.

Ich hoffe, dass das Ganze jetzt ein wenig klarer formuliert ist.

Danke nochmals :)
 
Zuletzt bearbeitet:
2 Möglichkeiten:

1) Statt Selection.TypeText => in eine feste Tabelle mit dem vorgeschlagenen Makro schreiben. Die Tabelle muß dann eben die erste Tabelle bleiben (über geschützten Bereich, etc. zu lösen).

2) Da auf den Textfelder rumgeritten wird : Zwei Textfelder über STRG+F9 erstellen. Folgenden Makro probieren :
Code:
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\Microsoft\Office\11.0\Common\UserInfo"
    KeyValue1 = System.PrivateProfileString("", Section1, Key1)
    
    Key2 = "Telefon"
    Section2 = "HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Common\UserInfo"
    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
Ins erste Textfeld wird der Name geschrieben; ins zweite die Telefonnummer. Ansonsten die Textfelder direkt per Namen ansprechen.
 
Hoi

sorry, dass ich mich länger nicht gemeldet habe, bin in letzter Zeit nicht dazugekommen, wie wohl auch in nächster Zeit recht schlecht.

Aber jetzt mal noch kurz zu deinem Posting:
1. ist leider nicht machbar, dass die Tabelle immer die 2te, oda 1te sein muss. (Bis auf man kann den Tabellen Namen vergeben und nicht nur 1. und 2. machen?)

2. Hab das mal für mich angepasst, funktioniert aber leider nicht (findet keine textmarke, oder so ähnlich. Bin leider nicht an dem Rechner, daher kann ich das jetzt grad nicht genau sagen. Hier hab ich leider kein Word drauf)

Ansonsten die Textfelder direkt per Namen ansprechen.

Wie funktioniert das ?

Danke nochmal für deine Bemühungen

Gruß
FreNZeN
 
Zurück
Oben