Microsoft Excel ActiveXコントロールが無効になっていますか?


113

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

おかげで、

マイク


具体的にはどのような制御でしたか?または、すべてのactiveXを意味しますか?
2014

私の3人の同僚もこの問題を抱えているようです。彼らのスプレッドシートは、ActiveXコントロール-コンボボックスとボタンを使用していると思います。そのうちの1人は自分のPCで作業していたため、更新を取得できませんでした。彼がそれを取り戻したとき、それはうまくコントロールを動かしました。つまり、彼のPCが自動更新されるまでです。今はそうではありません。また、ActiveXコントロールをシートに追加することもできません。
Mitchell Kaplan 2014

5
私の会社のすべてのユーザーと同じように、私もこの問題を経験しています。MSはExcelのActiveXコントロールを破壊する更新をどのようにリリースする可能性がありますか?狂ってる。
ハリーグ

3
@ vba4all:いいえ、これはプログラミングの質問であり、ここに属します。
Harry Johnston

2
@ vba4all:ActiveXコントロールはプログラミングツールです。そうではありませんか?他に何に使用しますか?たとえば、OPが機能しなくなった特定のサードパーティ製品(たまたまVBAを使用している)について質問した場合は、状況が異なります。しかし、この場合、影響を受けたのは彼自身のコードのように見えますか?
Harry Johnston

回答:


159

他のフォーラムから、これは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 ...)を閉じる必要があります。


1
更新されていないPCがありました。Excelを開いて、ActiveXボタンを追加することができました。C:\ Users [user.name] \ AppData \ Local \ Temp \ Excel8.0 \ MSForms.exdを探しましたが、Excel8.0フォルダーがありませんでした。その後、Windows Updateを実行しました。もう一度スプレッドシートにActiveXボタンを追加しようとしましたが、できませんでした。また、Excel8.0 \ MSForms.exdが作成されたことにも触れました。私はそれを削除し、再度開いたExcelを再起動せずにActiveXボタンを追加できるようになりました。ありがとう!
Mitchell Kaplan 2014

2
ありがとうございました!!このプロセスは私のコンピューターの問題を修正しました。大規模な公開リリースを持っている開発者にとって、これはうまくいかないと思います...うまくいけば、MSが修正を発行するでしょう。
Mike Pedersen、2014

1
これは私にはうまくいきませんでした。PCの1つでシステムを12/7/14に復元して、問題が解決するかどうかを確認しています。また、ボタンを削除して、以下の回答に従ってボタンを置き換えてみましたが、「オブジェクトを挿入できません」などのポップアップが表示されました。
mountainclimber

1
Windows XPユーザーの場合、Tempサブフォルダーは次の場所にあります: C:\ Documents and Settings \ [user.name] \ Local Settings \ Temp \ Excel8.0 \ MSForms.exd
bjtilley

2
上記のファイルを削除した後はうまくいきませんでしたが、C:/ Windows / Tempフォルダーでこれらのファイルを見つけて削除しました。その後、この問題を解決することができました。
QV1、2015年

35

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

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

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

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

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

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

%appdata%\ Microsoft \ forms

%temp%\ Excel8.0

%temp%\ VBE

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

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

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 for Applicationsを開き、コードモジュールにコメントまたは何らかの編集を追加してプロジェクトを変更し、[デバッグ]> [VBAProjectをコンパイル]をクリックします。

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

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

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

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

ソース


3
リンクされたソースを確認してください。スクリプトソリューションが更新されています
peterson

私のマシンでは、%appdata%は「C:\ Users \ <現在のユーザー> \ AppData \ Roaming \」として定義されているため、「%appdata%\ microsoft \ local \」ディレクトリはありません。また、「%appdata%\ Roaming \ microsoft \ forms \」は「C:\ Users \ <現在のユーザー> \ AppData \ Roaming \ Roaming \ microsoft \ forms \」のように冗長であり、このようなディレクトリは存在しません私のマシンで。
pstraton

15

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


1
また、実行しているOfficeのバージョンに応じて、KB2596927とKB2726958も表示されます。
Harry Johnston、

13

私は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が修正をリリースするまで、この回避策を使用して作業を配布し続けることができます。

このソリューションをここに投稿しまし


李ありがとう。それは私にとってはうまくいきましたが、Excel 2010を再起動する必要がありました(同時にVBAエディターを実行しているという事実に関連している可能性はありますか?)
J. Chomel

5

Windows 8.1では、Windows検索を使用して.exdファイルを見つけることができませんでした。一方、cmdコマンドdir *.exd /Sは私のシステムで1つのファイルを見つけました。


3

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

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

私の場合、さまざまな場所にあるExcelファイルのすべてのユーザーをアップグレード/更新できません。一部のユーザーがExcelファイルを保存した後に問題が再発するため、ActiveXコントロールを別のものに置き換える必要があります。


2
ファイルをXLSXとして保存(すべてのコードを削除)してから、以前と同じように再貼り付けする以外、XLSMとして再保存する以外は、どの提案も機能しませんでした。お尻マイクロソフトの巨大な、大規模な痛み。
Officeを

2

エンドユーザー向けの簡略化された手順。以下を自由にコピーして貼り付けてください。

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

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

この修正が機能するためには、問題が発生するまで待つ必要がある場合があります。時期尚早に(Windows Updateがシステムにインストールされる前に)適用しても効果はありません。


2

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

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

2015年3月に、自動修正と手動の指示に加えて修正プログラムがリリースされ、Windows Updateでも入手できます。

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

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

この問題の修正プログラムは、Office 2007、2010、2013の2015年3月のアップデートでリリースされています。

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

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

https://technet.microsoft.com/en-us/library/security/ms14-082.aspx

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

手動および追加のソリューション:

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

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

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 for Applicationsを開き、コードモジュールにコメントまたは何らかの編集を追加してプロジェクトを変更し、[デバッグ]> [VBAProjectをコンパイル]をクリックします。

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

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

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



0

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

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

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

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

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


0

私にとっては唯一の役目を果たした答えを提供したいと思います(私は私がこれまでに1人だけかもしれないと思います)。リボンを使用して呼び出す1つのマクロがありました。次のコードが含まれていました。

colStore = new Collection

エラーが発生することに気づかなかったので、困惑してここですべて試しました。ボタンが機能しなくなったので、ボタンを機能させることができませんでした。エラーに気づき、次のように修正した場合:

Set colStore = new Collection

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.