[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『レジストリの書き換え』(nobuhiko)
お世話になります。
レジストリの
HKEY_LOCAL_MACHINE
の値の書き換えは、excel vbaでは無理なのでしょうか?
どうかよろしくお願いいたします。
< 使用 Excel:Excel2010、使用 OS:Windows7 >
私自身は GetSettingやSaveSettingの可能範囲(HKEY_CURRENT_USER)でのみ処理していますが
https://support.microsoft.com/ja-jp/kb/145679
APIを使えば可能なんでしょうね。
くれぐれも自己責任で。
(β) 2015/08/18(火) 20:42
下記のサイトには、APIでも書き込めない様な事が書いてあり、
このサイトに相談させてもらいに来ました。
可能なんでしょうか?
RegQueryValueでは、読み込めたのですが。
http://backyard.hatenablog.com/entry/20150528/1432800450
どうかよろしくお願いいたします。
(nobuhiko) 2015/08/18(火) 21:02
私は、これをよく使います。嘘です、そんなにレジストリを触ることはないので ごくたまに使います。
http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/object/wshshell.htm
本社サイト https://msdn.microsoft.com/ja-jp/library/cc364417.aspx
自己責任というのは 同じです。
(ichinose) 2015/08/18(火) 21:14
今は私もこれでやっています。
ですが、問題があって、
regwriteにて値を
"\\192.168.100.180\My_System\dat\"から
"\\192.168.100.75\My_System\dat\"に変更
こうした場合、
実際の使用データは、"\\192.168.100.75\My_System\dat\"のデータになっているにも関わらず、
レジストリエディターの値は "\\192.168.100.180\My_System\dat\" と変わらずなのですが、
VBSの書き方に問題があるのでしょうか?
要するに書き換わっているのですが、目視する値が変わっていない状況です。
うーん。上手く伝わってますでしょうか?
どうかよろしくお願いいたします。
(nobuhiko) 2015/08/18(火) 21:32
コードを見せてください
(ichinose) 2015/08/18(火) 23:24
このあたり全く素人ですが、HKEY_CURRENT_USER の範囲で、以下を実行してみます。
Sub TextX() On Error Resume Next DeleteSetting "MainKey1", "SubKey1", "Item1" On Error GoTo 0 End Sub
Sub Test0() Dim ans As Variant
ans = GetSetting("MainKey1", "SubKey1", "Item1") If ans = "" Then MsgBox "未登録" Else MsgBox "登録済み:" & ans End If
End Sub
Sub Test1() SaveSetting "MainKey1", "SubKey1", "Item1", "myData1" End Sub
ここで RegEdit を開きます。
MainKey1/SubKey1/Item1 の値は myData1 になっています。
この時点で Test0 を実行すると、あたりまえですが myData1 と表示されます。 で、以下を実行します。
Sub Test2() SaveSetting "MainKey1", "SubKey1", "Item1", "myData2" End Sub
実行後、Test0 を実行すると、これも当たり前ですが、myData2 が表示されます。
でも RegEdit画面では myData1 のままです。 RegEditを終了させ、あらためて RegEditを動かしますと、myData2 が表示されています。
すべっているかもしれませんが・・・
(β) 2015/08/19(水) 08:58
返信が遅れ申し訳ございません。
>コードを見せてください
了解いたしました。
下記になります。
Option Explicit
Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
' ↓\\192.168.100.180\My_System\dat\ と表示されます エディタは、\\192.168.100.180\My_System\dat\ となっています
WScript.Echo WshShell.RegRead("HKLM\Software\MySoft\MyPATH")
WshShell.RegWrite "HKEY_LOCAL_MACHINE\Software\MySoft\MyPATH", "\\192.168.100.75\My_System\dat\", "REG_SZ"
' ↓\\192.168.100.75\My_System\dat\に設定しました と表示されます エディタは、\\192.168.100.180\My_System\dat\ となっています
WScript.Echo WshShell.RegRead("HKLM\Software\MySoft\MyPATH") & "に設定しました"
Set WshShell = Nothing
エクセルの質問でなくなってしまい申し訳ございません。
宜しくお願い致します。
(nobuhiko) 2015/08/19(水) 09:48
実行後、エディターを終了させ、もう一度エディターを動かしても、表示はかわっていないのですか?
(β) 2015/08/19(水) 12:24
また、返信遅くなり申し訳ございません。
>実行後、エディターを終了させ、
>もう一度エディターを動かしても、表示はかわっていないのですか?
はい、変わっていないんです。
これは、パソコンの問題なのでしょうかね。
(nobuhiko) 2015/08/19(水) 16:24
別案として、書き換えたい周辺の情報をファイルにエクスポート(.reg)。このファイルを書き換え。
regedit にファイル名を引数指定すると更新してくれます。試してみてください。
(???) 2015/08/19(水) 17:00
現象を確認しました。原因はわかりません。
とにかく、違うレジストリを見ているような不思議な現象です。
VBAから WSHのRegreadやRegwriteを使って値の書き換え・読込を行うと 正しく変更されている結果が表示されます(これ、実行した直後だけでなく、PCを立ち上げなおしても 変更は、持続しています)。
が、Regeditで参照すると、対象の値は何も変わっていません。
これ ???さんの Regeditから regファイルを引数指定しても VBAからは、WSHを使った現象と同じです。
Regeditからの手動操作やregファイルの実行では 想定通りの結果が得られます。
又、VBAではなく、VBSで
Dim WshShell Set WshShell = WScript.CreateObject("WScript.Shell") ' ↓\\192.168.100.180\My_System\dat\ と表示されます エディタは、\\192.168.100.180\My_System\dat\ となっています WScript.Echo WshShell.RegRead("HKLM\Software\MySoft\MyPATH") WshShell.RegWrite "HKEY_LOCAL_MACHINE\Software\MySoft\MyPATH", "\\192.168.100.75\My_System\dat\", "REG_SZ" ' ↓\\192.168.100.75\My_System\dat\に設定しました と表示されます エディタは、\\192.168.100.180\My_System\dat\ となっています WScript.Echo WshShell.RegRead("HKLM\Software\MySoft\MyPATH") & "に設定しました" Set WshShell = Nothing
nobuhikoさんが提示されたようなコードを実行すれば 正しく作動します。
???さんご提案のregeditを使った方法
with wscript.createobject("wscript.shell") .run "regedit /s D:\F\レジストリ退避\test.reg" end with
このようなコードも正常に作動します。
VBAでは作動しません(エラーにならず、一見正常に終了しますし、その値も正しくみえるように変わっていますが、手動でRefeditを参照すると 変わっていません)。
セキュリティを変更して試しましたが、私には VBAでは 実際にレジストリを変えることはできませんでした。
もう少し 探ってみますが、VBSでは、変更できる という結果から 何か解決させる方法も 念頭に置いてみてください。
(ichinose) 2015/08/21(金) 05:33
追伸 nobuhikoさんも私と同じでしょうか?
つまり、VBAでは変更不可でも VBSでは、可
現象が違うなら教えてください
手動操作も不可なら 問題が違ってきますから・・・・。 (ichinose) 2015/08/21(金) 05:43
6台ほど試しました。
結果は、VBAから、
途中VBSをRUNさせてRegReadで読み込んだものをINIファイルに書き込み
(VBSにINIのAPIはありませんが)
それをVBAから読み込むようにしました。
ただ、VBSでRegWriteすると、エディータでEntryを自分で書き換えても
変更してくれないPCもありました。そのPCはVBSでしか変更できなくなりました。
自分が未熟なのもありますが。
ただ、危険だなという感想を持ちました。
返信が随分と遅くなり、大変申し訳ございませんでした。
また、宜しくお願い致します。
(nobuhiko) 2015/10/11(日) 10:06
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.