3

Я на Windows 7. В прошлом я использовал Excel 2003. Я установил Office 2013 и обнаружил, что мой Office 2003 не поврежден и я могу запустить обе версии. Я обновил некоторые листы, используя Excel 2013 и код VBA.

Мне сообщили, что мне нужно использовать Office 2010 (я не буду вдаваться в причины), поэтому я удалил Office 2013 и установил Office 2010 (корпоративные лицензии). Когда я открываю электронные таблицы, которые я изменил с помощью Excel 2013 в 2010 году, я получаю сообщение Microsoft Visual Basic для приложений:

Класс не зарегистрирован. Ищем объект с CLSID:(AC9F2F90-E877-11DE-9F68-00AA00574A4F)

Когда я нажимаю Ok, я получаю сообщение Excel

Excel обнаружил нечитаемый контент в name_of_spreadsheet.xls. Вы хотите восстановить содержание этой книги?

Если я выберу ДА, я получу сообщение

Excel смог открыть файл, исправив или удалив нечитаемый контент. Потерянный проект Visual Basic. Произведены исправления в отчете сводной таблицы. Один или несколько недопустимых условных форматов были удалены из книги и элементов управления ActiveX.

Теперь код VBA не найден. Рабочая книга открывается и выглядит нормально, но кнопки под управлением VBA не работают, а при открытии VBA (Alt+F11) я не вижу ни одного из модулей.

Я попытался запустить FM20.dll с помощью regsrv32.exe, и я получил сообщение, которое говорит:

Не удалось загрузить модуль fm20.dll. Убедитесь, что двоичный файл хранится по указанному пути, или отладьте его, чтобы проверить наличие проблем с двоичным или зависимым файлом.DLL файлы. Указанный модуль не может быть найден".

Но я запустил regsrv32 из подкаталога, в котором был FM20.dll.

Я предполагаю, что мои проблемы связаны с потерей проекта Visual Basic и / или элементов управления ActiveX.

Что мне нужно сделать, чтобы найти код VBA, существовавший до удаления Excel 2013 и установки Excel 2010?

3 ответа3

3

У меня была похожая проблема. Я использовал другой файл fm20.dll с другого компьютера, который еще не был "обновлен" до 2013 года. Регистрация fm20.dll прошла нормально, и моя проблема ушла. Кажется, файл fm20.dll был поврежден. Любой VBA, имеющий Userforms, похоже, подвержен влиянию. Ошибка Excel 2010, которую я получил, была: «Макросы Visual Basic для приложений (VBA) для этой книги повреждены и были удалены. Повреждение макросов, скорее всего, существует в текущем файле. Чтобы восстановить макросы, откройте резервную копию этого файла, если он у вас есть. »Простой тест открытия рабочей книги VBA только с работающим кодом и простого файла с пользовательской формой, на котором была одна метка без кода. , который не удалось, привел меня к файлу fm20.dll. Я получил то же сообщение, пытаясь зарегистрировать файл fm20.dll в проблемной системе, говоря, что файл был плохим. Скопировал новый fm20.dll из хорошей системы, регистрация прошла нормально, проблема ушла.

2

Office 2013 устанавливает VBA 7.1. С его помощью обновленные версии FM20.dll, которая, в свою очередь, зависит от распространяемых VC10-файлов, в частности, msvcr100.dll. Когда VBA 7.1 удален - он не удаляет FM20.dll - но сопутствующее приложение, скорее всего, удалит перенаправление VC10. Когда это происходит, FM20.dll не работает. Дело не в том, что оно коррумпировано - оно просто неполноценно. (Я разыскал это с помощью инструмента Visual Studio, Depends.exe)

Проблема заключается в том, что переустановка приложения, использующего VBA 6.x, не перезапишет эту более новую версию FM20.dll, поэтому файл остается поврежденным.

Кажется, что это ошибка в установщике VBA 7.1, что он не очищает этот файл. Вы должны обойти решения. Удалите FM20.dll и восстановите старое приложение - или установите распространяемый VC10.

1

Этот пост помог мне исправить эту ошибку:
https://dynamicsgpland.blogspot.in/2009/11/vba-error-class-not-registered-looking.html

Ошибка VBA: класс не зарегистрирован. Ищем объект с CLSID: {AC9F2F90-E877-11CE-9F68-00AA00574A4F}

Я знаю, я знаю, это такая очевидная ошибка, верно? Я имею в виду, на самом деле, есть ли еще кто-нибудь в мире Dynamics GP, кто бы не осмеял вас за вопрос об этом очевидном идентификаторе класса?

Поэтому я недавно создал новый виртуальный сервер разработки для нового проекта, что я делал десятки раз без проблем. Но почему-то на этот раз я столкнулся с несколькими странными проблемами с Dynamics GP. Одним из них была эта ошибка VBA:

Это было на новом виртуальном сервере Windows Server 2008 x64, SQL Server 2005 с пакетом обновления 3 (SP3) и Dynamics GP 10 FP1 с установленным пакетом обновления 4 (SP4). У меня не было установленной Visual Studio или Office, что, я уверен, является причиной ошибки.

Ошибка возникала всякий раз, когда я пытался импортировать файл формы пользователя в VBA, или всякий раз, когда я пытался вставить новую форму пользователя.

Позже я обнаружил, что эта ошибка, по-видимому, является вариантом, описанным в статье 961568 КБ MBS:

"Произошли ошибки во время загрузки" или при импорте файла пакета, который имеет форму пользователя: класс {C62A69F0-16DC-11CE-9E98-00AA00574A4F} элемента управления frmXXX не был загруженным классом элемента управления.

В то время я знал, что это, вероятно, означало, что DLL не была зарегистрирована на сервере, но хотя эти прекрасные идентификаторы GUID приятно видеть, они ничего не сообщают обычному человеку о том, какая DLL не зарегистрирована.

В качестве ярлыка я переключился на сервер, который, как я знал, не имел проблем с пользовательскими формами в VBA, и искал в реестре этот GUID. Этот поиск сказал мне, что проблема была в том, что файл FM20.dll не был зарегистрирован.

После поиска в Google для этого имени я узнал, что FM20.dll - это файл, необходимый для работы VBA с формами Windows. Эта прекрасная статья в КБ описывает его использование, но подчеркивает, что FM20.dll "НЕ распространяется" (они должны были сделать НЕ все заглавные и полужирные для тех из нас, кто был неясен и запутался в строчной не жирной версии слова » not '), и что его можно получить, только установив одно из нескольких приложений Microsoft, которые его распространяют.

Должно быть, команде высококлассных юристов потребовались тысячи долларов оплачиваемых часов, чтобы придумать эту блестящую схему, которая наверняка помешала бы кому-то скопировать один файл DLL и зарегистрировать его вручную. Чтобы избежать гнева тех же самых юристов-стажеров, я не просто скопировал библиотеку DLL с другого компьютера и зарегистрировал ее на своем новом сервере. Вместо этого я использовал ссылку в той же статье базы знаний, чтобы загрузить очень популярную "Microsoft ActiveX Control Pad", которая устанавливает для меня столь желанный файл FM20.dll.

(Конечно, в статье MBS KB говорится, что нужно просто скопировать файл FM20.dll с компакт-диска MS Office. Обходим ли мы правила, MBS?)

И с этим ошибка исчезла, и я смог вставить пользовательские формы и импортировать файлы форм в мой проект VBA.

Одно замечание - если вы работаете на Windows Server 2008 x64, 32-разрядный файл устанавливается в каталог C:\Windows\SysWOW64.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .