web-dev-qa-db-ja.com

Microsoft ExcelのActiveXコントロールが無効?

特定のアクティビティを制御するためにActiveXチェックボックスを使用するExcelワークシートがいくつかあります。彼らは最近働いたが今日はエラーを出し始めた。私は同僚からこれに警告されましたが、それはまだ私のコンピュータで働いていました。私は自分のバージョンのExcelを自分のものと比較したところ、もっと新しいものだった。私は新しいWindowsアップデートがあることに気づいたので、私はアップデートをしました。保留中のアップデートを適用した後、それが今私のコンピュータ上で動作しなくなりました。 ActiveXのチェックボックスをチェックできなくなり、デバッグしようとしたときに、ActiveXコントロールをどのワークシートにも、新しいワークシートにも追加できなくなりました。 「オブジェクトを挿入できません」というエラーダイアログが表示されます。 (私はまだActiveXではなく、フォームコントロールを追加することができます。)最近の更新の後にこれを経験している他の誰かが?助言がありますか?

ありがとう、

マイク

110
Mike Pedersen

他のフォーラムから、私はそれがMS Updateによるものであり、ユーザープロファイルの任意のTempサブフォルダーからMSForms.exdファイルを削除することが良い解決策であることを学びました。例えば:

C:\Users\[user.name]\AppData\Local\Temp\Excel8.0\MSForms.exd

C:\Users\[user.name]\AppData\Local\Temp\VBE\MSForms.exd

C:\Users\[user.name]\AppData\Local\Temp\Word8.0\MSForms.exd

もちろん、このファイルを削除するには、アプリケーション(Excel、Wordなど)を閉じる必要があります。

156
John W.

これがMicrosoft Excelサポートチームのブログで見つけた最良の答えです。

一部のユーザーにとって、Forms Controls(FM20.dll)は、2014年12月の更新プログラムをインストールした後、期待通りに動作しなくなりました。フォームコントロールを使用して既存のVBAプロジェクトでファイルを開いたり、新しいワークシートにフォームコントロールを挿入したり、これらのコンポーネントを使用している可能性のあるサードパーティ製ソフトウェアを実行したりするときなど、問題が発生します。

次のようなエラーが表示されることがあります。

"オブジェクトを挿入できません" "オブジェクトライブラリが無効か、見つからなかったオブジェクト定義への参照が含まれています"

また、コードを使用してワークシートのメンバーとしてActiveXコントロールを参照しようとすると、ワークシート上のActiveXコントロールのプロパティを使用または変更できない、あるいはエラーを受け取ることができない場合があります。 更新後の手順:

この問題を解決するには、クライアントコンピュータ上のキャッシュされているコントロールタイプライブラリ(エクステンダファイル)のバージョンを削除する必要があります。これを行うには、ファイル拡張子 ".exd"を持つファイルをハードディスクで検索し、見つかったすべての.exdファイルを削除する必要があります。次回VBAを使用するときに新しいコントロールを使用すると、これらの.exdファイルは自動的に再作成されます。これらの拡張ファイルはユーザーのプロファイルの下にあり、以下のような他の場所にある可能性もあります。

%appdata%\ Microsoft\forms

%temp%\ Excel8.0

%temp%\ VBE

スクリプトソリューション:

この問題は複数のマシンに影響を与える可能性があるため、ポリシーを使用してログオンプロセスの一部としてEXDファイルを削除し、スクリプトを実行するスクリプトソリューションを作成することも可能です。必要なスクリプトには次の行が含まれている必要があります。また、.exdファイルはUSER固有のものであるため、各USERに対して実行する必要があります。

del%temp%\ vbe\*。exd

del%temp%\ Excel8.0\*。exd

del%appdata%\ Microsoft\forms\*。exd

del%appdata%\ Microsoft\local\*。exd

del%appdata%\ Roaming\Microsoft\forms\*。exd

del%temp%\ Word8.0\*。exd

del%temp%\ PPT11.0\*。exd

追加の手順:

上記の手順を実行しても問題が解決しない場合は、テスト可能な別の手順を実行してください(下記の警告を参照)。

  1. 完全に更新されたコンピュータで、.exdファイルを削除した後、編集権限を使用してファイルをExcelで開きます。

    アプリケーション用のVisual Basicを開く>コードモジュールにコメントまたは編集を追加してプロジェクトを変更します。>デバッグ> VBAProjectのコンパイル。

    ファイルを保存して再度開きます。解決をテストします。解決した場合は、この更新されたプロジェクトを追加のユーザーに提供してください。

    警告:この手順で問題が解決した場合は、この更新されたプロジェクトを他のユーザーに展開した後、これらのユーザーもシステムに適用された更新と.exdファイルを削除する必要があります。

これで問題が解決しない場合は、別の問題である可能性があり、さらにトラブルシューティングが必要になる可能性があります。

マイクロソフトは現在この問題に取り組んでいます。最新情報についてはブログを見てください。

出典

35
Jan Moritz

KB2553154 でした。マイクロソフトは修正プログラムをリリースする必要があります。 Excelアプリケーションの開発者として、すべてのクライアントコンピュータにアクセスしてそれらからファイルを削除することはできません。マイクロソフトが引き起こしたことのせいにしています。

14
Ron R

私はExcelの開発者であり、そしてこれが起こったとき私は間違いなく痛みを感じました。幸い、Excelが実行されている場合でも、VBAのMSForms.exdファイルの名前を変更することで回避策を見つけることができました。これにより、問題を解決することもできます。スプレッドシートを配布する必要があるExcel開発者は、次のVBAコードをスプレッドシートに追加して、MSの更新の影響を受けないようにできます。

このコードを任意のモジュールに配置してください。

Public Sub RenameMSFormsFiles() 
  Const tempFileName As String = "MSForms - Copy.exd"  
  Const msFormsFileName As String = "MSForms.exd"  
  On Error Resume Next 

  'Try to rename the C:\Users\[user.name]\AppData\Local\Temp\Excel8.0\MSForms.exd file  
  RenameFile Environ("TEMP") & "\Excel8.0\" & msFormsFileName, Environ("TEMP") & "\Excel8.0\" & tempFileName 
  'Try to rename the C:\Users\[user.name]\AppData\Local\Temp\VBE\MSForms.exd file  
  RenameFile Environ("TEMP") & "\VBE\" & msFormsFileName, Environ("TEMP") & "\VBE\" & tempFileName 
End Sub  

Private Sub RenameFile(fromFilePath As String, toFilePath As String) 
  If CheckFileExist(fromFilePath) Then 
      DeleteFile toFilePath  
      Name fromFilePath As toFilePath  
  End If  
End Sub

Private Function CheckFileExist(path As String) As Boolean 
  CheckFileExist = (Dir(path) <> "")  
End Function  

Private Sub DeleteFile(path As String) 
  If CheckFileExist(path) Then 
      SetAttr path, vbNormal  
      Kill path  
  End If  
End Sub    

RenameMSFormsFilesサブルーチンは、C:\Users\[user.name]\AppData\Local\Temp\Excel8.0\およびC:\Users\[user.name]\AppData\Local\Temp\VBE\フォルダー内のMSForms.exdファイルの名前をMSForms - Copy.exdに変更しようとします。

次に、Workbook_Openイベントの先頭でRenameMSFormsFilesサブルーチンを呼び出します。

Private Sub Workbook_Open() 
  RenameMSFormsFiles  
End Sub

スプレッドシートは、開くときにMSForms.exdファイルの名前を変更しようとします。明らかに、これは完全な解決策ではありません。

  1. スプレッドシートを初めて開いたときにVBAコードを実行すると、影響を受けるユーザーに引き続きActiveXコントロールエラーが発生します。 VBAコードを1回実行してExcelを再起動した後にのみ、問題は解決します。通常、ユーザーが壊れたスプレッドシートに遭遇したときのひどい反応は、Excelを閉じてスプレッドシートをもう一度開くことです。 :)
  2. MSForms.exdファイルに問題がない場合でも、MSForms.exdファイルはスプレッドシートが開くたびに名前が変更されます。しかし、スプレッドシートは問題なく動作します。

少なくとも今のところ、Excel開発者は、Microsoftが修正プログラムをリリースするまで、この回避策を使用して作業を配布し続けることができます。

私はこの解決策 をここ に投稿しました。

13
Yi Hu

Windows 8.1では、Windowsサーチでは.exdファイルが見つかりませんでした。一方、cmdコマンドdir *.exd /Sは、私のシステムで1つのファイルを見つけました。

5
Marc Thibault

KB以上のアドバイスは私にはうまくいきませんでした。 1人のExcel 2007ユーザー(セキュリティ更新プログラムの有無にかかわらず、これを引き起こす正確な状況は不明)がファイルを保存すると、元のエラーが返されることを私は発見しました。

私はファイルを再度修復する最も速い方法はすべてのVBAコードを削除することであることを発見しました。保存する。次にVBAコードを置き換えます(コピー/貼り付け)。保存する。これを試みる前に、最初に.EXDファイルを削除します。そうしないと、オープン時にエラーが発生します。

私の場合、さまざまな場所にある自分のExcelファイルのすべてのユーザーをアップグレードまたは更新することはできません。何人かのユーザーがExcelファイルを保存した後に問題が戻ってくるので、私は他の何かでActiveXコントロールを交換しなければならないでしょう。

3
pghcpa

私が見つけることができるこの問題についての情報と最新情報の最も良い情報源はTechNetブログ"Microsoft Excelサポートチームブログ(前述のとおり)にあります。

2014年12月の更新後にフォームコントロールが機能しなくなる(2015年3月10日更新)

2015年3月に自動化されたfix-itと手動の指示に加えて修正プログラムがリリースされました、そしてそれは同様にWindows Updateで利用可能です。

Microsoftからの最新の更新および修正: 3025036セキュリティ更新プログラムMS14-082をインストールした後のActiveXカスタムOfficeソリューションの "オブジェクトを挿入できません"エラー

ステータス:更新2015年3月10日:

この問題に対する修正プログラムは、2015年3月のOffice 2007、2010、および2013の更新プログラムに含まれています。

問題に関する一般的な情報:

一部のユーザーにとって、2014年12月のMS14-082 Microsoft Officeセキュリティ更新プログラムのインストール後、フォームコントロール(FM20.dll)が正常に機能しなくなります。フォームコントロールを使用して既存のVBAプロジェクトでファイルを開くときなどに問題が発生します。フォームコントロールを新しいワークシートに挿入するか、またはこれらのコンポーネントを使用する可能性のあるサードパーティ製ソフトウェアを実行します。

https://technet.Microsoft.com/ja-jp/library/security/ms14-082.aspx

「オブジェクトを挿入できません」などのエラーが表示されることがあります。 "オブジェクトライブラリが無効か、見つからなかったオブジェクト定義への参照が含まれています。"; 「このオブジェクトの作成に使用されたプログラムはFormsです。このプログラムはコンピュータにインストールされていないか、応答していません。このオブジェクトを編集するには、FormsをインストールするかFormsのダイアログボックスを閉じてください。」 [...]さらに、コードを使用してワークシートのメンバーとしてActiveXコントロールを参照しようとすると、ワークシート上のActiveXコントロールのプロパティを使用または変更できない、またはエラーを受け取ることができない場合があります。

手動および追加の解決策

スクリプトソリューション:

この問題は複数のマシンに影響を与える可能性があるため、ポリシーを使用してログオンプロセスの一部としてEXDファイルを削除し、スクリプトを実行するスクリプトソリューションを作成することも可能です。必要なスクリプトには次の行が含まれている必要があります。また、.exdファイルはUSER固有のものであるため、各USERに対して実行する必要があります。

del %temp%\vbe\*.exd
del %temp%\Excel8.0\*.exd
del %appdata%\Microsoft\forms\*.exd
del %appdata%\Microsoft\local\*.exd
del %temp%\Word8.0\*.exd
del %temp%\PPT11.0\*.exd

追加のステップ

上記の手順を実行しても問題が解決しない場合は、テスト可能な別の手順を実行してください(下記の警告を参照)。

  1. 完全に更新されたコンピュータで、.exdファイルを削除した後、編集権限を使用してファイルをExcelで開きます。

  2. アプリケーション用のVisual Basicを開く>コードモジュールにコメントまたは編集を追加してプロジェクトを変更します。>デバッグ> VBAProjectのコンパイル。

  3. ファイルを保存して再度開きます。解決をテストします。

解決した場合は、この更新されたプロジェクトを追加のユーザーに提供してください。

警告:この手順で問題が解決した場合は、この更新されたプロジェクトを他のユーザーに展開した後、これらのユーザーもシステムに適用された更新と.exdファイルを削除する必要があります。

2
dePatinkin

エンドユーザー向けの簡易説明書。以下をコピーしてください。

問題が発生したときに修正する方法は次のとおりです。

  1. すべてのOfficeプログラムとファイルを閉じます。
  2. Windowsエクスプローラを開き、アドレスバーに%TEMP%と入力してEnterキーを押します。これでシステムの一時フォルダに移動します。
  3. 次のフォルダを探して削除します:Excel8.0、VBE、Word8.0
  4. 今すぐあなたのファイルをもう一度使用してみてください、それは何の問題もないはずです。

この問題を解決するには、問題が発生するまで待つ必要があります。 Windows Updateがシステムにインストールされる前に時期尚早に適用しても意味がありません。

2
perry

私はついにこの答えをマイクロソフトの公式ナレッジベースで見つけました。

http://support.Microsoft.com/kb/3025036/EN-US

これまでの回答で得たもの以外に新しい情報はありませんが、少なくともマイクロソフトは問題を認識していると認識しています。

1
Mike Pedersen

私は私にとって唯一のものとして働いていた答えを提供したいと思います(私は私が今までで唯一の人かもしれないことに気付きます)。私はリボンを使って呼んでいる一つのマクロを持っていました。それは以下のコードを持っていました:

colStore = new Collection

私はそれがエラーを投げることに気づいていなかったので、私は困惑してここですべてを試みました。ボタンが機能しなくなっただけで、機能させることができませんでした。私はエラーに気づいてそれを修正したとき:

Set colStore = new Collection

それはまた働き始めた。あなたが私に尋ねるならば絶対に奇妙な、しかし多分それは私と同じくらい絶望的だった誰かがそこにいるのを助けます。

0
Spurious

私はこのためにすでに多くの答えが投稿されていることを知っていますが、どちらの答えも私のサイトに対して独立して機能しませんでした。だからここに私のために働いたものがあります:

手順1:次の更新プログラムをアンインストールする - KB2920789、KB2920790、KB2920792、KB2920793、KB2984942、KB2596927

手順2:これらの更新を非表示にして、次回の再起動時にインストールされないようにする

ステップ3:C:\ Users\<>\AppData\Local\TempからExcel8.0フォルダを削除します

ステップ4:workstatiionを再起動します(上記のKBが誤って適用されなかったことも確認します)。

0
chaltahai