Элементы управления Microsoft Excel ActiveX отключены?

У меня есть листы Excel, которые используют флажки ActiveX для управления определенной деятельностью. Они работали недавно, но сегодня начали давать ошибки. Я был предупрежден об этом коллегой, но он все еще работал на моем компьютере. Я проверил его версию Excel против моего, и он был новее. Я заметил, что появились новые обновления Windows, поэтому я сделал обновление. После того, как я применил ожидающие обновления, теперь он больше не работает на моем компьютере. Я больше не могу проверять флажки ActiveX, и, как часть попытки отладки, кажется, что я даже не могу добавить элемент управления ActiveX на любой рабочий лист, даже новый лист. Я получаю диалоговое окно с ошибкой, в котором говорится: "Невозможно вставить объект". (Я все еще могу добавить элементы управления формой, а не ActiveX.) Кто-нибудь еще испытывает это после недавнего обновления? Любые предложения?

Спасибо,

Mike

Ответ 1

Из других форумов я узнал, что это связано с MS Update и что хорошим решением является просто удалить файл MSForms.exd из любой подпапки Temp в профиле пользователя. Например:

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...) должно быть закрыто для удаления этого файла.

Ответ 2

Вот лучший ответ, который я нашел в блоге команды поддержки Microsoft Excel

Для некоторых пользователей Forms Controls (FM20.dll) больше не работают как ожидается после установки обновлений в декабре 2014 года. Проблемы опытные в разы, например, когда они открывают файлы с существующим VBA проекты, использующие элементы управления формами, попытайтесь вставить элемент управления формой в новый рабочий лист или запустить стороннее программное обеспечение, которое может использовать эти компоненты.

Вы можете получить такие ошибки, как:

"Невозможно вставить объект" "Библиотека объектов недействительна или содержит ссылки для определения объектов, которые не могут быть найдены"

Кроме того, вы не сможете использовать или изменять свойства ActiveX на листе или получить сообщение об ошибке при попытке обратитесь к элементу ActiveX в качестве элемента рабочего листа через код. Шаги после обновления:

Чтобы устранить эту проблему, вы должны удалить кешированные версии библиотеки типов управления (файлы расширений) на клиентском компьютере. Делать это, вы должны искать свой жесткий диск для файлов с ".exd" расширение имени файла и удалить все найденные вами файлы .exd. Эти .exd будут автоматически создаваться при использовании нового управляет в следующий раз, когда вы используете VBA. Эти файлы расширений будут под профилем пользователя и может также находиться в других местах, таких как следующее:

% AppData%\Microsoft\формы

% Temp%\Excel8.0

% Temp%\VBE

Решение для сценариев:

Поскольку эта проблема может затронуть более одной машины, это также возможно создать скриптовое решение для удаления EXD файлов и запустите script как часть процесса входа в систему, используя политику. scriptвам нужно будет содержать следующие строки и должны быть запускается для каждого ПОЛЬЗОВАТЕЛЯ, так как файлы .exd имеют значение 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

Дополнительный шаг:

Если приведенные выше шаги не позволяют устранить проблему, можно сделать еще один шаг, который может быть (см. предупреждение ниже):

  • На полностью обновленной машине и после удаления файлов .exd откройте файл в Excel с разрешениями на редактирование.

    Открыть Visual Basic для приложений > изменить проект, добавив комментарий или отредактировать какой-либо код в любой модуль кодa > Debug > Compile VBAProject.

    Сохраните и снова откройте файл. Проверьте разрешение. Если это разрешено, предоставьте этот обновленный проект дополнительным пользователям.

    Предупреждение. Если этот шаг разрешает вашу проблему, имейте в виду, что после развертывания этого обновленного проекта другим пользователям эти пользователи будут также необходимо иметь обновления, применяемые к их системам и .exd файлам также удалены.

Если это не решит вашу проблему, это может быть другая проблема и может потребоваться дальнейшее устранение неполадок.

В настоящее время Microsoft работает над этой проблемой. Смотрите блог для обновления.

Источник

Ответ 3

Это был KB2553154. Microsoft должна выпустить исправление. Как разработчик приложений Excel, мы не можем обращаться ко всем компьютерам наших клиентов и удалять файлы с них. Нас обвиняют в том, что Microsoft вызвала.

Ответ 4

Я разработчик Excel, и я определенно почувствовал боль, когда это произошло. К счастью, я смог найти обходное решение, переименовав файлы MSForms.exd в VBA, даже когда работает Excel, что также может решить проблему. Разработчики 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 пытается переименовать файлы MSForms.exd в папках C:\Users\[user.name]\AppData\Local\Temp\Excel8.0\ и C:\Users\[user.name]\AppData\Local\Temp\VBE\ в MSForms - Copy.exd.

Затем вызовите подпрограмму RenameMSFormsFiles в самом начале события Workbook_Open.

Private Sub Workbook_Open() 
  RenameMSFormsFiles  
End Sub

Электронная таблица попытается переименовать файлы MSForms.exd при ее открытии. Очевидно, что это не идеальное решение:

  • Уязвимый пользователь по-прежнему будет испытывать ошибки управления ActiveX при первом запуске кода VBA при первом запуске электронной таблицы. Только после выполнения кода VBA один раз и перезапуска Excel, проблема исправлена. Обычно, когда пользователь сталкивается с разбитой электронной таблицей, реакция коленного рефлекса заключается в том, чтобы закрыть Excel и попытаться снова открыть таблицу.:)
  • Файлы MSForms.exd переименовываются каждый раз, когда открывается электронная таблица, даже если нет проблем с файлами MSForms.exd. Но таблица будет работать нормально.

По крайней мере, на данный момент разработчики Excel могут продолжать распространять свою работу с этим обходным решением до тех пор, пока Microsoft не опубликует исправление.

Я разместил это решение здесь.

Ответ 5

В Windows 8.1 я не смог найти .exd файлы, используя поиск в Windows. С другой стороны, команда cmd dir *.exd /S обнаружила один файл в моей системе.

Ответ 6

Совет в КБ и выше не работал у меня. Я обнаружил, что если один пользователь Excel 2007 (с или без обновления безопасности, не уверенный в точных обстоятельствах, которые вызывают это), сохраняет исходный текст.

Я обнаружил, что самый быстрый способ восстановить файл снова - удалить весь код VBA. Сохранить. Затем замените код VBA (копирование/вставка). Сохранить. Прежде чем пытаться это, я сначала удаляю файлы .EXD, потому что в противном случае я получаю сообщение об ошибке при открытии.

В моем случае я не могу обновлять/обновлять всех пользователей своего файла Excel в разных местах. Поскольку проблема возникает после того, как некоторые пользователи сохраняют файл Excel, мне придется заменить элемент управления ActiveX чем-то другим.

Ответ 7

Упрощенные инструкции для конечных пользователей. Не стесняйтесь копировать/вставлять следующее.

Вот как решить проблему, когда она возникает:

  • Закройте все ваши программы и файлы Office.
  • Откройте проводник Windows и введите% TEMP% в адресную строку, затем нажмите Enter. Это приведет вас в временную папку системы.
  • Найдите и удалите следующие папки: Excel8.0, VBE, Word8.0
  • Теперь попробуйте снова использовать ваш файл, у него не должно быть никаких проблем.

Вам может потребоваться дождаться возникновения проблемы, чтобы это исправление работало. Применение досрочно (до того, как Windows Update будет установлено в вашей системе) не поможет.

Ответ 8

Лучший источник информации и обновлений по этой проблеме я могу найти в блогах TechNet "Блог группы поддержки Microsoft Excel (как упоминалось):

Элементы управления формы перестают работать после обновлений в декабре 2014 г. (обновлено 10 марта 2015 г.)

В марте 2015 года исправление было выпущено в дополнение к автоматическим исправлениям и инструкциям вручную, а также доступно в Центре обновления Windows.

Последнее обновление и исправление от Microsoft: 3025036 Ошибка "Невозможно вставить объект" в специальном решении Office ActiveX после установки обновления безопасности MS14-082

СТАТУС: обновление 10 марта 2015 года:

Исправления для этой проблемы были выпущены в марте 2015 г. Обновления для Office 2007, 2010 и 2013.

Общая информация о проблеме:

Для некоторых пользователей Form Controls (FM20.dll) больше не работают должным образом после установки обновлений безопасности Microsoft Office Security для MS14-082 на декабрь 2014 года. Проблемы возникают иногда, например, когда они открывают файлы с существующими проектами VBA с использованием форм управления, попробуйте вставить элемент управления формами в новый рабочий лист или запустить стороннее программное обеспечение, которое может использовать эти компоненты.

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

Вы можете получить такие ошибки, как: "Невозможно вставить объект"; "Библиотека объектов недействительна или содержит ссылки на определения объектов, которые не могут быть найдены"; "Программа, используемая для создания этого объекта, - это Forms. Эта программа либо не установлена ​​на ваш компьютер, либо не отвечает. Чтобы отредактировать этот объект, установите Forms или убедитесь, что все диалоговые окна в Forms закрыты". [...] Кроме того, вы не сможете использовать или изменить свойства элемента ActiveX на листе или получить сообщение об ошибке при попытке ссылаться на элемент управления ActiveX в качестве члена рабочего листа через код.

Ручные и дополнительные решения:

Решение сценариев:

Поскольку эта проблема может затронуть более одной машины, также возможно создать решение для удаления файлов EXD и запустить script как часть процесса входа в систему с использованием политики. script, который вам нужен, должен содержать следующие строки и должен быть запущен для каждого пользователя, так как файлы .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

Дополнительный шаг:

Если описанные выше шаги не разрешают вашу проблему, еще один шаг, который можно протестировать (см. предупреждение ниже):

  • На полностью обновленной машине и после удаления файлов .exd откройте файл в Excel с разрешениями редактирования.

  • Откройте Visual Basic для приложений > измените проект, добавив комментарий или отредактировав какой-либо код в любой модуль кодa > Debug > Compile VBAProject.

  • Сохранить и снова открыть файл. Проверьте разрешение.

Если это разрешено, предоставьте этот обновленный проект дополнительным пользователям.

Предупреждение. Если этот шаг устраняет вашу проблему, имейте в виду, что после развертывания этого обновленного проекта другим пользователям эти пользователи также должны будут иметь обновления, применяемые к их системам и удаленные файлы .exd.

Ответ 9

Наконец-то я нашел этот ответ на официальном Microsoft KB:

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

Нет новой информации здесь, чем в предыдущих ответах, но, по крайней мере, она признает, что Microsoft знает об этой проблеме.

Ответ 10

Я знаю, что для этого уже было опубликовано много ответов, но ни один ответ не работал самостоятельно для моего сайта. Итак, вот что сработало для меня:

Шаг 1: Удалите следующие обновления: KB2920789, KB2920790, KB2920792, KB2920793, KB2984942, KB2596927

Шаг 2. Скройте эти обновления, чтобы они не устанавливались при последующих перезагрузках.

Шаг 3: Удалите папку Excel8.0 из C:\Users\< > \AppData\Local\Temp

Шаг 4: Перезагрузите рабочую станцию ​​(я также удостоверился, что вышеупомянутые КБ не были случайно применены)

Ответ 11

Я хочу дать ответ, который работал как единственное для меня (я понимаю, что я могу быть единственным). У меня был один макрос, который я звонил с помощью ленты. Он имел следующий код:

colStore = new Collection

Я не знал, что это порождает ошибку, поэтому я был озадачен и попробовал все здесь. Кнопка просто перестала работать, и я не мог заставить ее работать. Когда я заметил ошибку и исправил ее:

Set colStore = new Collection

Он снова начал работать. Абсолютно странно, если вы спросите меня, но, возможно, это помогает кому-то, кто был таким же отчаянным, как я.