2009-04-15 25 views
1

MS Officeプログラムでは、以前に開いたときにエラーが発生した無効なファイルの一覧が保持されます。ユーザーは、プログラムメニューからリストにアクセスし、再び有効にする文書を選択することにより、このリストから文書を削除することができます。 (http://support.microsoft.com/kb/286017MS Officeの無効なファイルリストで文書をプログラムで再度有効にする方法

質問:この文書の再有効化は、GUIとのやりとりなしに、プログラムで行うことができますか? MS OfficeのXPについて

答えて

1

(2002)MSWordのようにランダムキーの下にバイナリ値命名され続ける無効な文書のリスト: ます。[HKEY_CURRENT_USER \ Software \ Microsoft \ Officeの\ 10.0 \ Wordの\復元力\ DisabledItemsレジストリ]

をしたがって、すべてのユーザーの "DisabledItems"キーの下の値を削除することは、おそらくトリックを行います。

さらに詳しい情報がありますか?私にはまだ分かりません。

+1

これは、Microsoftがその機能を理由で実装したことに注意してください...ドキュメント/アドインが不安定な場合、ユーザーは常にすべての機能を再度有効にしていただきありがとうございます。 – Ant

+0

ええ、通常、このリストに載っている文書には正当な理由があります。私の必要性は、サーバーベースで動作する非常に特殊化されたアプリケーションであり、何かがうまくいかないときにクリーンアップする本当のユーザーはいません。 –

1

OfficeがCOMAddinsを処理する方法については、codeprojectという有名な記事があります。通常のAddinsは同等に処理され、システムはこれまでのところ変更されませんでした(Office 2013まで)。 私が知る限り。無作為に指定された値には、ヌル文字列で区切られたユニコード文字のバイト配列が含まれます。 ヌルで区切られた値の配列のすべてのエントリについて調べることができませんでした。しかし、index(3)にはADDInのファイル名が含まれており、index(4)にはADDInの説明が含まれています。

だから、1の値を読み、Luieが前の回答を統合し、ここではそれらにexpounding 2009

1

に戻って書いたように、レジストリキーを削除する前に、アドインを再インストールするようユーザーに依頼する必要があります。

Office製品は、無効なアイテムをHKEY_CURRENT_USER\Software\Microsoft\Office\<version>\<product>\Resiliency\DisabledItemsという名前のキーでレジストリに格納します。たとえば、Excel 2010の無効リストはHKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Excel\Resiliency\DisabledItemsです。

各無効化されたアイテムは、タイプREG_BINARYのランダムに名前が付けられたキーとして格納されます。バイト配列の形式は次のとおりです。

  • バイト0-3:???
  • バイト4-7:最初の文字列(パス)の32ビット単位長(バイト単位)
  • バイト8-11:32ビット(おそらく32ビットuint型コード、1 = COMアドイン) 2番目の文字列でuint長さ(バイト単位)(説明)
  • バイト12エンド:Unicode文字の二つの文字列、ここ
2

上記するuintに格納されてそれぞれがのバイト長のPowershellあります私がWin7でMS-Access 2013で抱えていた同様の問題に合わせて投げたスクリプト

#RemoveOfficeDisabledItem.ps1 
#command line: 
# powershell -executionpolicy unrestricted -file ".\RemoveOfficeDisabledItem.ps1" 

#Update these variables to suit your situation 
$OfficeVersion="15.0" 
$OfficeApp="Access" 
$FileName="My Blocked File.mdb" 

#Converts the File Name string to UTF16 Hex 
$FileName_UniHex="" 
[System.Text.Encoding]::ASCII.GetBytes($FileName.ToLower()) | %{$FileName_UniHex+="{0:X2}00" -f $_} 

#Tests to see if the Disabled items registry key exists 
$RegKey=(gi "HKCU:\Software\Microsoft\Office\${OfficeVersion}\${OfficeApp}\Resiliency\DisabledItems\") 
if($RegKey -eq $NULL){exit} 

#Cycles through all the properties and deletes it if it contains the file name. 
foreach ($prop in $RegKey.Property) { 
    $Val="" 
    ($RegKey|gp).$prop | %{$Val+="{0:X2}" -f $_} 
    if($Val.Contains($FileName_UniHex)){$RegKey|Remove-ItemProperty -name $prop} 
} 
0

BATスクリプトを使用して、Excel 2016ですべての「無効なアイテム」を再度有効にします。
無効なアイテムは、Excel->ファイル - >オプション - >追加 - >管理 - >無効アイテムです。

のparamsのFYI
:: Deletes all values under the key. 
REG DELETE HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Excel\Resiliency\DisabledItems /va /f 


/オムニバスこのキーの下のすべての値を削除します。
/fプロンプトなしで強制的に削除します。

PS。タスクスケジューラでマクロを実行するワークブックがたくさんあります。 Excelは、無効になったアイテムリストにクラッシュしたブックをランダムに追加します。したがって、このBATスクリプトを毎日実行することで問題は解決します。

関連する問題