Элементы управления Microsoft Excel ActiveX отключены?
У меня есть несколько листов Excel, которые используют флажки ActiveX для управления определенной деятельностью. Они работали недавно, но сегодня начали давать ошибки. Я был предупрежден об этом коллегой, но он все еще работал на моем компьютере. Я проверил его версию Excel против моей, и он был новее. Я заметил, что появились новые обновления Windows, поэтому я сделал обновление. После того, как я применил ожидающие обновления, он больше не работает на моем компьютере. Я больше не могу устанавливать флажки ActiveX, и, как часть попытки отладки, кажется, что я даже больше не могу добавить элемент управления ActiveX ни на одну рабочую таблицу, даже на новую. Я получаю диалоговое окно с сообщением об ошибке "Невозможно вставить объект". (Я все еще могу добавить элементы управления формой, но не ActiveX.) Кто-нибудь еще испытывал это после недавнего обновления? Какие-либо предложения?
Спасибо,
Майк
11 ответов
Из других форумов я узнал, что это происходит из-за 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
Для некоторых пользователей элементы управления форм (FM20.dll) больше не работают должным образом после установки обновлений в декабре 2014 года. Иногда возникают проблемы, например, когда они открывают файлы в существующих проектах VBA с помощью элементов управления формами, пытаются вставить элемент управления формы в новую рабочую таблицу или запускают стороннее программное обеспечение, которое может использовать эти компоненты.
Вы можете получить ошибки, такие как:
"Невозможно вставить объект" "Библиотека объектов недействительна или содержит ссылки на определения объектов, которые не могут быть найдены"
Кроме того, вы не сможете использовать или изменить свойства элемента управления ActiveX на листе или получить сообщение об ошибке при попытке обратиться к элементу управления ActiveX как к элементу листа с помощью кода. Действия после обновления:
Чтобы решить эту проблему, необходимо удалить кэшированные версии библиотек типов элементов управления (файлы расширений) на клиентском компьютере. Для этого вы должны выполнить поиск на жестком диске файлов с расширением имени ".exd" и удалить все найденные файлы.exd. Эти файлы.exd будут воссозданы автоматически при следующем использовании новых элементов управления при следующем использовании VBA. Эти файлы расширений будут находиться в профиле пользователя, а также могут находиться в других местах, таких как следующие:
% AppData%\Microsoft\ формы
% 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
Дополнительный шаг:
Если описанные выше действия не помогли решить проблему, еще один шаг, который можно проверить (см. Предупреждение ниже):
На полностью обновленном компьютере и после удаления файлов.exd откройте файл в Excel с правами на редактирование.
Откройте Visual Basic для приложений> измените проект, добавив комментарий или какое-либо редактирование в любой модуль кода> Отладка> Компилировать 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 при открытии. Очевидно, это не идеальное решение:
- Уязвимый пользователь по-прежнему будет испытывать ошибки управления ActiveX при запуске кода VBA при первом открытии электронной таблицы. Проблема устраняется только после однократного выполнения кода VBA и перезапуска Excel. Обычно, когда пользователь встречает сломанную электронную таблицу, реакция коленного рефлекса состоит в том, чтобы закрыть Excel и снова попытаться открыть электронную таблицу.:)
- Файлы MSForms.exd переименовываются при каждом открытии электронной таблицы, даже если нет проблем с файлами 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 г.:
Исправления для этой проблемы были выпущены в мартовских обновлениях для Office 2007, 2010 и 2013.
Общая информация о проблеме:
Для некоторых пользователей элементы управления формой (FM20.dll) больше не работают должным образом после установки MS14-082 обновлений Microsoft Office Security в декабре 2014 года. Иногда возникают проблемы, например, при открытии файлов в существующих проектах 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
Дополнительный шаг:
Если описанные выше действия не помогли решить проблему, еще один шаг, который можно проверить (см. Предупреждение ниже):
На полностью обновленном компьютере и после удаления файлов.exd откройте файл в Excel с правами на редактирование.
Откройте Visual Basic для приложений> измените проект, добавив комментарий или какое-либо редактирование в любой модуль кода> Отладка> Компилировать VBAProject.
Сохраните и снова откройте файл. Тест на разрешение.
Если решено, предоставьте этот обновленный проект дополнительным пользователям.
Предупреждение. Если этот шаг решит вашу проблему, имейте в виду, что после развертывания этого обновленного проекта для других пользователей этим пользователям также необходимо будет применить обновления в своих системах и удалить файлы.exd.
Упрощенные инструкции для конечных пользователей. Не стесняйтесь копировать / вставлять следующее.
Вот как можно решить проблему, когда она возникнет:
- Закройте все ваши программы и файлы Office.
- Откройте проводник Windows и введите%TEMP% в адресную строку, затем нажмите Enter. Это приведет вас в системную временную папку.
- Найдите и удалите следующие папки: Excel8.0, VBE, Word8.0
- Теперь попробуйте использовать ваш файл снова, с ним не должно возникнуть никаких проблем.
Возможно, вам придется подождать, пока проблема не возникнет, чтобы это исправление заработало. Преждевременное применение (до того, как в вашей системе будет установлен Центр обновления Windows) не поможет.
Я хочу дать ответ, который сработал как единственное для меня (я понимаю, что могу быть единственным когда-либо). В одном макросе я звонил, используя ленту. У него был следующий код:
colStore = new Collection
Я не знал, что это выдает ошибку, поэтому я был сбит с толку и попробовал все здесь. Кнопка просто перестала работать, и я не мог заставить ее работать. Когда я заметил ошибку и исправил ее:
Set colStore = new Collection
Это снова начало работать. Абсолютно странно, если вы спросите меня, но, возможно, это поможет кому-то, кто был в таком же отчаянии, как и я.
Я наконец нашел этот ответ на официальном Microsoft KB:
http://support.microsoft.com/kb/3025036/EN-US
Здесь нет никакой новой информации, кроме той, что есть в предыдущих ответах, но, по крайней мере, она признает, что Microsoft знает об этой проблеме.
Я знаю, что многие ответы уже были опубликованы для этого, но ни один из них не работал независимо для моего сайта. Вот что сработало для меня:
Шаг 1. Удалите следующие обновления - KB2920789, KB2920790, KB2920792, KB2920793, KB2984942, KB2596927
Шаг 2. Скрыть эти обновления, чтобы они не устанавливались при последующих перезагрузках
Шаг 3: Удалить папку Excel8.0 из C:\Users\<>\AppData\Local\Temp
Шаг 4. Перезапустите рабочую станцию (я бы также позаботился о том, чтобы вышеупомянутые КБ случайно не были применены)