Microsoft Excel ActiveX Controls вимкнено?


113

У мене є кілька робочих таблиць Excel, які використовують прапорці ActiveX для контролю певної активності. Вони працювали недавно, але сьогодні почали помилятися. Мене про це попередив колега, але він все ще працював на моєму комп’ютері. Я перевірив його версію Excel проти моєї, і його було новіше. Я помітив, що з'явилися нові оновлення Windows, тому я зробив оновлення. Після того як я застосував очікувані оновлення, тепер це більше не працює на моєму комп’ютері. Я більше не можу перевіряти прапорці ActiveX, і, як частина спроби налагодження, виявляється, що я навіть не можу додати елемент ActiveX до жодного робочого аркуша, навіть нового робочого аркуша. У мене з’являється діалогове вікно про помилку, яке говорить: "Неможливо вставити об'єкт". (Я можу додати елементи керування формою, тільки не ActiveX.) Хто-небудь ще відчував це після недавнього оновлення? Будь-які пропозиції?

Дякую,

Майк


який контроль це конкретно було? чи ти маєш на увазі ВСІ активнийX?
підж

У моїх колег також є ця проблема. Їх електронні таблиці використовують, я думаю, елементи управління ActiveX - ComboBoxes і Buttons. Один з них працював над його ПК, тому оновлення не отримували. Коли він повернувся, він успішно запустив елементи управління. Тобто, поки його ПК автоматично не оновився. Тепер це не так. Ми також не можемо додати до своїх аркушів елементи керування ActiveX.
Мітчелл Каплан

5
Я теж відчуваю цю проблему, як і всі користувачі моєї фірми. Як MS може випустити оновлення, яке порушує елементи керування ActiveX в Excel? Це божевілля.
harryg

3
@ vba4all: ні, це питання програмування і тут належить.
Гаррі Джонстон

2
@ vba4all: Контрольні панелі ActiveX - це інструмент програмування - чи не так? Для чого ще ви їх використали б? Було б інакше, якби ОП, наприклад, розпитувала про певний сторонній продукт (який трапляється використовувати 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 [ім'я користувача] \ AppData \ Local \ Temp \ Excel8.0 \ MSForms.exd, але папки Excel8.0 не було. Потім я запустив оновлення Windows. Я знову спробував додати кнопку ActiveX до своєї таблиці та не зміг. Я також зазначив, що зараз у мене був той Excel8.0 \ MSForms.exd. Я видалив його і без перезавантаження знову відкрив Excel і тепер міг додати кнопку ActiveX. Дякую!
Мітчелл Каплан

2
Дякую!! Цей процес вирішив проблему на моєму комп’ютері. Я думаю, що розробники, у яких є великі публічні випуски, що це порушує ... Сподіваємось, MS видасть виправлення.
Майк Педерсен

1
Це для мене не вийшло. Я роблю відновлення системи назад до 12/7/14 на одному з наших ПК, щоб побачити, чи це виправить. Я також спробував видалити кнопку та замінити її відповідно до відповіді нижче, але я отримав спливаюче вікно "Не можу вставити об'єкт" або щось подібне.
гірський альпініст

1
Для користувачів Windows XP підпапку Temp можна знайти тут: C: \ Документи та параметри \ [ім'я користувача] \ Локальні настройки \ Темп \ Excel8.0 \ MSForms.exd
bjtilley

2
Після видалення вищезазначених файлів він не працював для мене, але потім я знайшов ці файли в папці C: / Windows / Temp і видалив їх. Тоді мені вдалося налагодити цю проблему.
QV1

35

Ось найкраща відповідь, яку я знайшов у блозі команди підтримки Microsoft Excel

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

Можливо, ви отримали помилки, такі як:

"Неможливо вставити об'єкт" "Бібліотека об'єктів недійсна або містить посилання на визначення об'єктів, які неможливо знайти"

Крім того, можливо, ви не можете використовувати або змінювати властивості елемента керування ActiveX на робочому аркуші або отримувати помилку при спробі посилатися на елемент керування ActiveX як член робочого листа за допомогою коду. Кроки, які слід виконати після оновлення:

Щоб вирішити цю проблему, потрібно видалити кешовані версії бібліотек типу керування (файли розширень) на клієнтському комп'ютері. Для цього потрібно шукати на жорсткому диску файли з розширенням імені файлу ".exd" та видалити всі файли .exd, які ви знайдете. Ці файли .exd будуть створені автоматично, коли ви наступного разу використовуєте нові елементи керування VBA. Ці файли розширень знаходяться під профілем користувача, а також можуть знаходитися в інших місцях, таких як:

% appdata% \ Microsoft \ форми

% temp% \ Excel8.0

% temp% \ VBE

Розробка сценарію:

Оскільки ця проблема може зачіпати більш ніж одну машину, можна також створити сценарій рішення для видалення файлів EXD та запустити скрипт як частину процесу входу за допомогою політики. Сценарій, який вам знадобиться, повинен містити наступні рядки і його потрібно запускати для кожного USER, оскільки файли .exd призначені для USER.

del% temp% \ vbe \ *

del% temp% \ excel8.0 \ *

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

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

del% appdata% \ Роумінг \ microsoft \ форми \ *

del% temp% \ word8.0 \ *

del% temp% \ PPT11.0 \ *

Додатковий крок:

Якщо описані вище кроки не вирішують проблему, ще один крок, який можна перевірити (див. Попередження нижче):

  1. На повністю оновленій машині та після видалення .exd-файлів відкрийте файл в Excel з дозволом редагування.

    Відкрийте Visual Basic для додатків> модифікуйте проект, додавши коментар або редагуйте якийсь тип до будь-якого кодового модуля> Налагодження> Скомпілювати VBAProject.

    Збережіть і знову відкрийте файл. Тест на роздільну здатність. Якщо рішення вирішено, надайте цей оновлений проект додатковим користувачам.

    Попередження: Якщо цей крок вирішить вашу проблему, майте на увазі, що після розгортання цього оновленого проекту для інших користувачів, цим користувачам також потрібно буде оновити оновлення на їхніх системах та .exd-файли.

Якщо це не вирішує вашу проблему, це може бути інша проблема, і може знадобитися подальше усунення несправностей.

В даний час Microsoft працює над цим питанням. Слідкуйте за оновленнями в блозі.

Джерело


3
Перевірте пов'язане Джерело, тепер оновлено рішення для сценаріїв
peterson

На моїй машині% appdata% визначається як "C: \ Користувачі \ <поточний користувач> \ AppData \ Роумінг \", тому немає "% appdata% \ microsoft \ local \" каталогу. Крім того, "% appdata% \ Roaming \ microsoft \ форми \" видається зайвим, оскільки "C: \ Користувачі \ <поточний користувач> \ AppData \ Роумінг \ Роумінг \ Мікрософт \ форми \", і, знову ж таки, такого каталогу не існує на моїй машині.
пстратон

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 намагається перейменувати файли 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 не випустить виправлення.

Я опублікував це рішення тут .


Дякую Yi Це працювало для мене, але мені довелося перезапустити свій Excel 2010 (це може бути пов’язано з тим, що я одночасно працював редактором VBA?)
Дж. Чомель,

5

У Windows 8.1 я не міг знайти жодних .exd-файлів за допомогою пошуку Windows. З іншого боку, команда cmd dir *.exd /Sзнайшла один файл у моїй системі.


3

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

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

У моєму випадку я не можу оновити / оновити всіх користувачів мого файлу Excel у різних місцях. Оскільки проблема повертається після того, як деякі користувачі зберігають файл Excel, мені доведеться замінити елемент керування ActiveX чимось іншим.


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 Update.

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

СТАТУС: Оновлення 10 березня 2015 року:

Виправлення цього випуску були опубліковані в оновленнях для березня 2015 року для Office 2007, 2010 та 2013.

Загальна інформація про проблему:

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

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

Ви можете отримати помилки, такі як: "Неможливо вставити об'єкт"; "Бібліотека об'єктів недійсна або містить посилання на визначення об'єктів, яких неможливо знайти"; "Програма, що використовується для створення цього об'єкта, - це Forms. Ця програма або не встановлена ​​на вашому комп'ютері, або не відповідає. Щоб відредагувати цей об'єкт, встановіть Forms або переконайтесь, що діалогові вікна у формах закриті." [...] Крім того, ви можете не мати можливості використовувати або змінювати властивості елемента керування ActiveX на робочому аркуші або отримувати помилку при спробі посилатися на елемент керування ActiveX як член робочого аркуша за допомогою коду.

Інструкції та додаткові рішення:

Розробка сценарію:

Оскільки ця проблема може зачіпати більш ніж одну машину, можна також створити сценарій рішення для видалення файлів EXD та запустити скрипт як частину процесу входу за допомогою політики. Сценарій, який вам знадобиться, повинен містити наступні рядки і його потрібно запускати для кожного USER, оскільки файли .exd призначені для USER.

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-файли.



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

Він знову почав працювати. Абсолютно дивно, якщо ви запитаєте мене, але, можливо, це допомагає комусь там, хто був такий же відчайдушний, як я.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.