WordやExcel等のOfficeアプリケーションでは、下記サイトにある通り、ファイルやフォルダの履歴がレジストリに記録されます。
Officeアプリケーションを使って人前でプレゼンをするとき等、履歴を表示したくない時に、いちいち手作業でレジストリを編集するのは面倒なので、所謂“最近使用したファイル”を一括で削除するスクリプトを書いてみました。
Option Explicit
Dim app, v
'Officeのバージョン取得
On Error Resume Next
Set app = CreateObject("Excel.Application")
On Error GoTo 0
If IsEmpty(app) Then
WScript.Echo "Officeアプリケーションのバージョンを取得できませんでした。"
Wscript.Quit
End If
v = app.Version
app.Quit
Set app = Nothing
ClearOfficeMRU "Software\Microsoft\Office\" & v & "\"
WScript.Echo "処理が終了しました。"
Private Sub ClearOfficeMRU(ByVal SubKeyName)
'全Officeアプリケーションの「最近使用したファイル」を削除する
Dim shell, reg
Dim keys, key
Dim subkeys, subkey
Dim names, types
Dim i
Const HKEY_CURRENT_USER = &H80000001
Set shell = CreateObject("WScript.Shell")
Set reg = CreateObject("WbemScripting.SWbemLocator") _
.ConnectServer(, "root\default").Get("StdRegProv")
reg.EnumKey HKEY_CURRENT_USER, SubKeyName, keys
If Not IsNull(keys) Then
For Each key In keys
Select Case LCase(key)
Case "file mru", "place mru", "user mru"
reg.EnumValues HKEY_CURRENT_USER, SubKeyName & key, names, types
If Not IsNull(names) Then
If UBound(names) > 1 Then
For i = LBound(names) To UBound(names)
If InStr(LCase(names(i)), "metadata") < 1 Then
If InStr(LCase(names(i)), "item") > 0 Then
'WScript.Echo shell.RegRead("HKEY_CURRENT_USER\" & SubKeyName & key & "\" & names(i)) '確認用
shell.RegDelete "HKEY_CURRENT_USER\" & SubKeyName & key & "\" & names(i)
End If
End If
Next
Else
reg.EnumKey HKEY_CURRENT_USER, SubKeyName & key, subkeys
If Not IsNull(subkeys) Then
For Each subkey In subkeys
ClearOfficeMRU SubKeyName & key & "\" & subkey & "\"
Next
End If
End If
End If
Case Else
ClearOfficeMRU SubKeyName & key & "\"
End Select
Next
End If
End Sub
仕組みは非常に単純で、下記のキー以下にある「File MRU」「User MRU」「Place MRU」キーを探し、履歴として残っている値(Item*)を削除する処理を再帰的に行っているだけです。
ただし、下記キー以下に対して順次処理を行っているため、すべての処理を終えるのに多少の時間は掛かります。
HKEY_CURRENT_USER\Software\Microsoft\Office\(Officeのバージョン)\(Officeアプリケーション)\
また、動作確認は行っているものの、上記スクリプトはレジストリの編集を行うものですので、実行は自己責任でよろしくお願いいたします。

















この記事へのコメントはありません。