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

113

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

Спасибо,

Майк

Майк Педерсен
источник
какой именно контроль был? или вы имеете ввиду ВСЕ activeX?
peege
У 3 моих коллег тоже есть эта проблема. Я думаю, что в их таблицах используются элементы управления ActiveX - ComboBoxes и Buttons. У одного из них работал компьютер, поэтому он не получил обновлений. Когда он получил его обратно, он успешно запустил управление. То есть, пока его ПК не обновится автоматически. Теперь это не так. Мы также не можем добавлять элементы ActiveX на их листы.
Митчелл Каплан
5
Я тоже испытываю эту проблему, как и все пользователи моей фирмы. Как могла MS выпустить обновление, которое ломает элементы управления ActiveX в Excel? Это безумие.
Гарриг
3
@ vba4all: нет, это вопрос программирования, и его место здесь.
Гарри Джонстон
2
@ vba4all: Элементы управления ActiveX - это инструмент программирования, не так ли? Для чего еще вы бы их использовали? Было бы иначе, если бы OP, например, спрашивал о конкретном стороннем продукте (который, как правило, использует VBA), который перестал работать. Но в этом случае, похоже, был затронут его собственный код?
Гарри Джонстон

Ответы:

159

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

Джон В.
источник
1
У меня был не обновленный компьютер. Я открыл Excel и смог добавить кнопку ActiveX. Я искал C: \ Users [user.name] \ AppData \ Local \ Temp \ Excel8.0 \ MSForms.exd, но папки Excel8.0 не было. Затем я запустил Центр обновления Windows. Я снова попытался добавить кнопку ActiveX в свою таблицу, но не смог. Я также заметил, что теперь у меня есть Excel8.0 \ MSForms.exd. Я удалил его и без перезагрузки снова открыл Excel и теперь смог добавить кнопку ActiveX. Спасибо!
Митчелл Каплан
2
Спасибо!! Этот процесс устранил проблему на моем компьютере. Я считаю, что для разработчиков, у которых есть большие публичные выпуски, это ломается ... Надеюсь, MS выпустит исправление.
Майк Педерсен
1
У меня это не сработало. Я делаю восстановление системы до 12/7/14 на одном из наших компьютеров, чтобы посмотреть, поможет ли это исправить. Я также попытался удалить кнопку и заменить ее в соответствии с ответом ниже, но я получил всплывающее окно «Не могу вставить объект» или что-то в этом роде.
mountainclimber
1
Для пользователей Windows XP подпапку Temp можно найти здесь: C: \ Documents and Settings \ [имя_пользователя] \ Local Settings \ Temp \ Excel8.0 \ MSForms.exd
bjtilley
2
После удаления вышеуказанных файлов у меня это не сработало, но затем я нашел эти файлы в папке C: / Windows / Temp и удалил их. Затем я смог заставить эту проблему работать.
QV1 06
35

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

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

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

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

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

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

% appdata% \ Microsoft \ forms

% temp% \ Excel8.0

% темп% \ VBE

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

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

del% temp% \ vbe \ *. exd

del% temp% \ excel8.0 \ *. exd

del% appdata% \ microsoft \ forms \ *. exd

дель% 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.

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

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

Источник

Ян Мориц
источник
3
проверьте связанный источник, теперь он обновил решение для сценариев
peterson
На моем компьютере% appdata% определяется как «C: \ Users \ <текущий пользователь> \ AppData \ Roaming \», поэтому каталога «% appdata% \ microsoft \ local \» нет. Кроме того, "% appdata% \ Roaming \ microsoft \ forms \" кажется избыточным, как "C: \ Users \ <текущий пользователь> \ AppData \ Roaming \ Roaming \ microsoft \ forms \", и, опять же, такой каталог не существует. на моей машине.
pstraton
15

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

Рон Р
источник
1
Также KB2596927 и KB2726958, в зависимости от используемой версии Office.
Гарри Джонстон
13

Я разработчик 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 SUBROUTINE пытается переименовать файлы 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 при открытии. Очевидно, это не идеальное решение:

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

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

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

Йи Ху
источник
Спасибо Йи. У меня это сработало, но мне пришлось перезапустить свой Excel 2010 (это могло быть связано с тем фактом, что я одновременно запускал редактор VBA?)
Дж. Чомель
5

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

Марк Тибо
источник
3

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

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

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

pghcpa
источник
2
Ни одно из предложений не сработало для меня, кроме сохранения файла как XLSX (удаление всего кода), а затем повторной вставки, как вы, - повторного сохранения как XLSM. Огромная, МАССИВНАЯ заноза в заднице Microsoft. Переустановка офиса тоже не
помогла
2

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

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

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

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

Перри
источник
2

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

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

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

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

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

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

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

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

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

Вы можете получить такие ошибки, как: «Невозможно вставить объект»; «Библиотека объектов недействительна или содержит ссылки на определения объектов, которые не удалось найти»; «Для создания этого объекта используется программа Forms. Эта программа либо не установлена ​​на вашем компьютере, либо не отвечает. Чтобы изменить этот объект, установите Forms или убедитесь, что все диалоговые окна в Forms закрыты». [...] Кроме того, возможно, вы не сможете использовать или изменить свойства элемента управления 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 для приложений> измените проект, добавив комментарий или отредактировав любой модуль кода> Отладка> Скомпилировать VBAProject.

  3. Сохраните и снова откройте файл. Тест на разрешение.

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

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

деПатинкин
источник
1

Я наконец нашел этот ответ в официальной базе знаний Microsoft:

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

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

Майк Педерсен
источник
0

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

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

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

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

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

Чалтахай
источник
0

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

colStore = new Collection

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

Set colStore = new Collection

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

Ложный
источник