11

COM自動化を介してMS-Word2007ドキュメントをロードする単純なC#Winformsアプリケーションを開発しました。

これはすべて非常に単純で簡単ですが、ドキュメントに応じて、プログラムでマクロとActiveXコントロールを有効または無効にする必要があります。

これをレジストリに保存する方法はおそらくありますが、一度に複数の同時リクエストが実行される可能性があるため、インスタンスごとにこれらの設定を制御したいと思います。

だから私の質問は「COM自動化を使用してトラストセンターの設定を構成するにはどうすればよいですか」です。

私は何時間もグーグルで検索しましたが、見つけることができたのはApplication.AutomationSecurityプロパティだけですが、これは次の値のみを受け入れます。

  • MsoAutomationSecurity.msoAutomationSecurityLow
  • MsoAutomationSecurity.msoAutomationSecurityForceDisable
  • MsoAutomationSecurity.msoAutomationSecurityByUI

ただし、Word 2007 Trust Centerは、次の設定を公開します。

マクロ設定:

  • 通知なしですべてのマクロを無効にします(msoAutomationSecurityForceDisableと一致します)
  • 通知付きのすべてのマクロを無効にします(これは必要ありません)
  • デジタル署名されたマクロを除くすべてのマクロを無効にします(同等のものはありません)
  • すべてのマクロを有効にします(msoAutomationSecurityLowと一致します)

代替テキスト
(出典:visguy.com


ActiveXコントロール(個別に構成されています。これらを制御する方法は見つかりませんでした。スクリーンショットによると、これらの設定はすべてのアプリケーション間で共有されていることに注意してください)

  • 通知なしにすべてのコントロールを無効にする
  • UFIコントロールを有効にする前にプロンプ​​トを表示します。
  • 最小限の制限ですべてのコントロールを有効にする前にプロンプ​​トを表示する
  • 制限なしですべてのコントロールを有効にする

代替テキスト

これらの設定を変更しながらMS-Wordマクロを記録するという古いトリックを試しましたが、これらの手順はいずれも記録されません。

更新: レジストリのActiveXコントロール設定に次のエントリが見つかりました。ActiveX設定は確かにグローバルであり、誰かが私を間違っていると証明しない限り、単一のMS-Wordインスタンスに指定することはできません。

ActiveX無効

[HKEY_CURRENT_USER \ Software \ Microsoft \ Office \ Common \ Security] "DisableAllActiveX" = dword:00000001 "UFIControls" = dword:00000002

セーフモードでActiveXを有効にする

[HKEY_CURRENT_USER \ Software \ Microsoft \ Office \ Common \ Security] "DisableAllActiveX" = dword:00000000 "UFIControls" = dword:00000002

セーフモードなしでActiveXが有効

[HKEY_CURRENT_USER \ Software \ Microsoft \ Office \ Common \ Security] "DisableAllActiveX" = dword:00000000 "UFIControls" = dword:00000001

マクロ設定の問題を解決することにまだ熱心です

4

4 に答える 4

8

私は自分の質問に答えようとしているようです。

私はそれをテストし、マッピングが次のとおりであることを確認できます。

マクロ設定:

  • msoAutomationSecurityForceDisable=通知なしですべてのマクロを無効にする

  • msoAutomationSecurityByUI=デジタル署名されたマクロを除くすべてのマクロを無効にする

  • msoAutomationSecurityLow=すべてのマクロを有効にする

私の知る限り、グローバルActiveX設定は、レジストリを直接編集することによってのみ構成できます。

ActiveX無効

[HKEY_CURRENT_USER \ Software \ Microsoft \ Office \ Common \ Security] "DisableAllActiveX" = dword:00000001 "UFIControls" = dword:00000002

セーフモードでActiveXを有効にする

[HKEY_CURRENT_USER \ Software \ Microsoft \ Office \ Common \ Security] "DisableAllActiveX" = dword:00000000 "UFIControls" = dword:00000002

セーフモードなしでActiveXが有効

[HKEY_CURRENT_USER \ Software \ Microsoft \ Office \ Common \ Security] "DisableAllActiveX" = dword:00000000 "UFIControls" = dword:00000001

MSDNWebサイトの関連セクションにコメントを残しました

于 2009-10-21T14:58:45.193 に答える
3

このスレッドはかなり古いことは知っていますが、今日それを理解する必要があったので、簡単な調査の結果、トラストセンター設定のこのレジストリを見つけました。

これは、Wordバージョン2010(およびおそらく2007ですが、14.0ではなく12.0)に適用されます。

ここに画像の説明を入力してください

またはテキストで:

レジストリの場所:

HKEY_CURRENT_USER \ Software \ Microsoft \ Office \ 14.0 \ Word \ Security

マクロ設定:

名前:VBAWarnings

データ

通知なしですべてのマクロを無効にする-4

通知付きですべてのマクロを無効にする-2

デジタル署名されたマクロを除くすべてのマクロを無効にする-3

すべてのマクロを有効にする(...)- 1

開発者マクロ設定:

名前:AccessVBOM

データ

チェックなし-0

チェック済み-1

于 2014-02-04T16:13:21.150 に答える
0

Office2010のActiveXコントロールの設定について

セーフモードなしでDisbaleActiveXに必要なのは...

"HKEY_CURRENT_USER\Software\Microsoft\Office\Common\Security" /v UFIControls /t REG_DWORD /D 1 /F
于 2014-02-22T22:24:15.640 に答える
0

私は数日かけて同じことを試しましたが、レジストリやExcelの信頼設定をいじることなく、マクロを含む.xlsファイルを開く非常に簡単な方法をついに発見しました。C#の場合:

Application aXL = new Application();
aXL.FileValidation = 
    Microsoft.Office.Core.MsoFileValidationMode.msoFileValidationSkip;
try {
     Workbook aBook = aXL.Workbooks.Open("K:\\Work\\ExcelTest\\BrokenMacro.xls"
                    , 0
                    , true
                    , Type.Missing
                    , Type.Missing
                    , Type.Missing
                    , true
                    , Type.Missing
                    , Type.Missing
                    , false
                    , false
                    , Type.Missing
                    , false
                    , false
                    , Type.Missing
                    /*,false*/);
            }
            catch (Exception e) {
                Console.WriteLine(e);
            }

詳細については、 MSDNを参照してください。

私のExcelトラストセンター設定はすべてデフォルト値に設定されていました-「警告付きのすべてのマクロを無効にする」および「VBAオブジェクトモデルへのアクセスを信頼しないでください。msoFileValidationSkipオプションがないと例外がスローされました。msoFileValidationSkipオプションを使用するとファイルは正常に開きました。

プログラムはマクロを使用してファイルを開くことができますが、Excelアプリケーションのウイルスに感染したスプレッドシートは開かないため、これが最善の方法のように思われます。

Office2010を実行していることに注意してください。このオプションが導入されたOfficeのバージョンがわかりません。

于 2014-04-03T19:03:28.590 に答える