У меня есть листы Excel, которые используют флажки ActiveX для управления определенной деятельностью. Они работали недавно, но сегодня начали давать ошибки. Я был предупрежден об этом коллегой, но он все еще работал на моем компьютере. Я проверил его версию Excel против моего, и он был новее. Я заметил, что появились новые обновления Windows, поэтому я сделал обновление. После того, как я применил ожидающие обновления, теперь он больше не работает на моем компьютере. Я больше не могу проверять флажки ActiveX, и, как часть попытки отладки, кажется, что я даже не могу добавить элемент управления ActiveX на любой рабочий лист, даже новый лист. Я получаю диалоговое окно с ошибкой, в котором говорится: "Невозможно вставить объект". (Я все еще могу добавить элементы управления формой, а не ActiveX.) Кто-нибудь еще испытывает это после недавнего обновления? Любые предложения?
Спасибо,
Mike
Из других форумов я узнал, что это связано с 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...) должно быть закрыто для удаления этого файла.
Вот лучший ответ, который я нашел в блоге команды поддержки 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 работает над этой проблемой. Смотрите блог для обновления.
Это был KB2553154. Microsoft должна выпустить исправление. Как разработчик приложений Excel, мы не можем обращаться ко всем компьютерам наших клиентов и удалять файлы с них. Нас обвиняют в том, что Microsoft вызвала.
Я разработчик 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 при ее открытии. Очевидно, что это не идеальное решение:
По крайней мере, на данный момент разработчики Excel могут продолжать распространять свою работу с этим обходным решением до тех пор, пока Microsoft не опубликует исправление.
Я разместил это решение здесь.
В Windows 8.1 я не смог найти .exd файлы, используя поиск в Windows. С другой стороны, команда cmd dir *.exd /S
обнаружила один файл в моей системе.
Совет в КБ и выше не работал у меня. Я обнаружил, что если один пользователь Excel 2007 (с или без обновления безопасности, не уверенный в точных обстоятельствах, которые вызывают это), сохраняет исходный текст.
Я обнаружил, что самый быстрый способ восстановить файл снова - удалить весь код VBA. Сохранить. Затем замените код VBA (копирование/вставка). Сохранить. Прежде чем пытаться это, я сначала удаляю файлы .EXD, потому что в противном случае я получаю сообщение об ошибке при открытии.
В моем случае я не могу обновлять/обновлять всех пользователей своего файла Excel в разных местах. Поскольку проблема возникает после того, как некоторые пользователи сохраняют файл Excel, мне придется заменить элемент управления ActiveX чем-то другим.
Лучший источник информации и обновлений по этой проблеме я могу найти в блогах TechNet "Блог группы поддержки Microsoft Excel (как упоминалось):
В марте 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.
Упрощенные инструкции для конечных пользователей. Не стесняйтесь копировать/вставлять следующее.
Вот как решить проблему, когда она возникает:
Вам может потребоваться дождаться возникновения проблемы, чтобы это исправление работало. Применение досрочно (до того, как Windows Update будет установлено в вашей системе) не поможет.
Наконец-то я нашел этот ответ на официальном Microsoft KB:
http://support.microsoft.com/kb/3025036/EN-US
Нет новой информации здесь, чем в предыдущих ответах, но, по крайней мере, она признает, что Microsoft знает об этой проблеме.
Я хочу дать ответ, который работал как единственное для меня (я понимаю, что я могу быть единственным). У меня был один макрос, который я звонил с помощью ленты. Он имел следующий код:
colStore = new Collection
Я не знал, что это порождает ошибку, поэтому я был озадачен и попробовал все здесь. Кнопка просто перестала работать, и я не мог заставить ее работать. Когда я заметил ошибку и исправил ее:
Set colStore = new Collection
Он снова начал работать. Абсолютно странно, если вы спросите меня, но, возможно, это помогает кому-то, кто был таким же отчаянным, как я.
Я знаю, что для этого уже было опубликовано много ответов, но ни один ответ не работал самостоятельно для моего сайта. Итак, вот что сработало для меня:
Шаг 1: Удалите следующие обновления: KB2920789, KB2920790, KB2920792, KB2920793, KB2984942, KB2596927
Шаг 2. Скройте эти обновления, чтобы они не устанавливались при последующих перезагрузках.
Шаг 3: Удалите папку Excel8.0 из C:\Users\< > \AppData\Local\Temp
Шаг 4: Перезагрузите рабочую станцию (я также удостоверился, что вышеупомянутые КБ не были случайно применены)