Ошибка Excel VBA во время выполнения "32809" - попытка понять

Сотрудник на работе внес некоторые изменения в одну из наших макроэкономических книг, и теперь на моем ПК только я получаю ужасную ошибку времени выполнения "32809", когда я пытаюсь запустить ее. Эта последняя версия отлично работает на его ПК и другом компьютере коллеги, на котором мы тестировали его. Предыдущая версия отлично работает на всех наших ПК, все из которых работают с Excel 2010.

Ошибка возникает, когда макрос пытается выбрать индекс 1 рабочего листа с именем "Информация". Я знаю, что Select/Activate не требуется, но сейчас я просто работаю с этой рабочей книгой и пытаюсь понять, почему я один получил бы эту ошибку.

Я пробовал:

  • Reboot/Power Cycle
  • Сохранение копии рабочей книги
  • Очистка файлов Temp с помощью CCleaner
  • Исследование онлайн
  • Проверка элементов управления ActiveX (использует элементы управления формой)

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

Debug.Print ThisWorkbook.Worksheets(1).Name

будет бросать ошибку во время выполнения, которая заставляет меня поверить, что каким-то образом Рабочий лист сломался. Я добавил несколько событий в Рабочий лист, включая _Activate и _Change, но никто не смог бы уйти даже после подтверждения того, что:

Application.EnableEvents = True

Я добавил простой тестовый Sub следующим образом:

Public Sub Test()

    Dim ws As Worksheet
    Dim sheetNum As Integer

    For Each ws In ThisWorkbook.Worksheets
        ws.Select           ' Selects all Sheets Without Error
        Debug.Print ws.Name ' Prints All Worksheet Names Fine
    Next ws

    Set ws = ThisWorkbook.Worksheets(1)
    ws.Select               ' Selects Sheet 1 Without Error

    ' Prints all but sheetNum = 1, Run-time Error 32809
    For sheetNum = 7 To 1 Step -1
        Debug.Print ThisWorkbook.Worksheets(sheetNum).Name
    Next sheetNum

    ' Run-time Error 32809
    ThisWorkbook.Worksheets(1).Select

End Sub

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

Ответы

Ответ 1

В моем случае следующее помогло:

  • Сохранить файл как .xlsx (без макрос) - все макросы будут удалены при сохранении;
  • Файл с открытым исходным кодом с макросами и копиями модулей в файл .xlsx;
  • Сохранить файл как .xlsm - выполнена полная перекомпиляция.

Впоследствии все стало нормально работать. У меня был файл с 200 + листами и более 50 макросами, а комментарии в каждом модуле не помогли, но это решение сработало.

Ответ 2

Я слишком долго боролся с этим. Фактически это произошло из-за некоторых обновлений Microsoft Office через Центр обновления Windows, начиная с декабря. Это вызвало немалую головную боль, не говоря уже о часах утраченной производительности из-за этой проблемы.

Одно из обновлений разбивает формы, и вам нужно очистить кеш Office, как указано UHsoccer

Кроме того, еще один ответ: Неожиданно несколько макросов VBA, в основном 32809 имеет ссылку на блог MS с подробностями.

Другое обновление вызывает другую ошибку: если вы создаете или изменяете одну из этих форм (даже так же просто, как сохранение данных формы), она обновит внутренности электронной таблицы, которая, когда она будет передана другому лицу без обновлений, приведет к ошибке выше.

Решение (если вы работаете с другими людьми в одной и той же электронной таблице)? К сожалению, у вас есть все, с кем вы имеете дело, с помощью офисных обновлений, затем очистите офисный кеш или вернитесь к обновлениям до Dec'14 через системное восстановление (или вручную удалив их).

Я знаю, не так много решений, верно? Я тоже не доволен.

В качестве предыстории я обновил свою машину, не отставая от обновлений, и одна из компаний, с которыми я справлялся, - нет. Я вытаскивал волосы перед Рождеством, пытаясь разобраться в проблеме, и без каких-либо пунктов восстановления я, наконец, смягчился и переформатировался.

Теперь, спустя месяц, ИТ-отдел компании обновил свои рабочие станции. И, без удивления, у них также возникли проблемы, подобные этому (не говоря уже о том, когда я получил свои электронные таблицы, у меня была та же проблема).

Теперь у нас все те же обновления, и все хорошо, как может быть.

Ответ 3

У меня возникла эта проблема при разработке приложения для клиента. Работая на моей машине, код/​​формы и т.д. Работал отлично, но при загрузке в клиентскую систему эта ошибка произошла в какой-то момент моего приложения.

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

Ответ 4

Это сработало для меня, используя excel 2010 и получив ту же ошибку при открытии файла macro-enabled .xlsm.

- после отклонения диалогового окна ошибки сделайте "save as" файл с разделителями табуляции .txt. нажмите OK для

... только активный лист.

... функции не сохранены.

-then "save as", но на этот раз выберите формат macro-enabled .xlsm. (к другому файлу или перезаписать оригинал не имеет значения, но сохранить, поскольку другой чувствует себя более безопасным.)

-close out excel.

-открыть вновь сохраненный файл .xlsm. В моих случаях сообщения об ошибках удалялись и макросы работали.

Ответ 5

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

Ответ 6

В моем случае произошла ошибка при выполнении макроса в: Листы ( "собственный лист один" ). Выберите

скопируйте лист в другой с другим именем, т.е. "oso", затем удалить исходный лист и переименовать новый как "собственный лист один"

Excel 2013

Ответ 7

Я столкнулся с аналогичным (почти необъяснимым) поведением

Найдена ссылка на удаление .exd файлов в каталоге C:\Users\username\AppData\Local\Temp Расположены по одному в каждом каталоге Excel8.0 и VBE. Типичное имя - MSForms.exd

Google "Excel exd" или "KB 2553154". С моей точки зрения, это совершенно неприемлемая ситуация, которая существует там как минимум месяц.

Ответ 8

Мое решение (может не сработать для вас)

Откройте приложение на машине, помеченной ошибкой. Измените код VB в некотором роде. (Я добавил одну строку комментария кода без последствий в один из макросов)

Листы (имя листа). Выберите "комментарий без последствий"

и сохраните его. Это приводит к перекомпиляции. Закрыть и снова открыть - все исправлено.

Надеюсь, что это имеет смысл и помогает

Грант

Ответ 9

Хорошо, это может быть странно. В любом случае у одного из моих коллег была эта ошибка, и мы пробовали редактировать VBA компилировать что угодно. Но дело в том, что просто скопируйте файл excel на рабочий стол. И это сработало. Файл Excel изначально был на сетевом диске. Это сработало, это мой ответ на этот вопрос.

Ответ 10

Я удалил все элементы ActiveX с листа, и теперь он работает плавно без сообщений об ошибках. Это мое решение.

Ответ 11

Я сделал следующее и работал как шарм:

  • Установите Office 2013 (я не пробовал с 2010 года, но я думаю, что это тоже сработает).
  • Установите Office 2013 SP1.
  • Запустите Windows Updates и установите все обновления Office и Windows.
  • Перезагрузите компьютер.
  • Готово.

Это работало для меня на двух разных компьютерах. Я надеюсь, что это тоже будет работать в твоем!

Ответ 12

Я экспортировал модуль VBA - сохранил файл, затем снова импортировал модуль, и все хорошо

Ответ 13

Я нашел решение. Просто скачайте следующее обновление Office: https://support.microsoft.com/en-us/kb/2920754

Выберите между 32-битным или 64-битным и установите.

Работал для меня, надеюсь, что это сработает для вас.

Привет

Ответ 14

У меня такая же проблема, и я обнаружил, что это проблема уязвимостей Microsoft.

Он работает для меня, когда я устанавливаю эти обновления. Эти исправления можно найти на сайте www.microsoft.com.

  • Если ваша версия Office 2010 - это пакет обновления 1 (SP1), вам необходимо сначала загрузить и установить пакет Office SP2. Обновление имени патча - KB2687455.

  • Установить обновление обновления KB2965240.

    Это обновление для системы безопасности устраняет уязвимости в Microsoft Office, которые могут позволить удаленное выполнение кода, если злоумышленник убеждает пользователя открыть или просмотреть специально созданную книгу Microsoft Excel в уязвимой версии Office. Злоумышленник, который успешно использовал уязвимости, мог получить те же права пользователя, что и текущий пользователь.

  • Установить обновление обновления KB2553154.

    В Microsoft Office 2010 32-Bit Edition существует уязвимость системы безопасности, которая позволяет запускать произвольный код при открытии злонамеренно измененного файла. Это обновление устраняет эту уязвимость.

Ответ 15

Я получил эту проблему после добавления combobox с VBA-кодом в конкретном листе. Тестирование кода и т.д. Не было проблемой, пока я снова не открыл лист. У Stackoverflow и Microsoft есть много рабочих мест, но нет реального решения. Я использую excel 2010 (голландская версия) с W10 (обновлен от W7). Я думаю, проблема в Excel 2010. В моем случае, я получил ошибку на линии, чтобы снять защиту с помощью VBA в модуле, который не был изменен в течение длительного времени.

Хорошо, так оно и есть на мой взгляд: В FM20.DLL возникла проблема с безопасностью, для которой MS получила обновление в первом квартале 2015 года. Это обновление устанавливает новый FM20.DLL, однако языковые пакеты (FM20NLD.DLL и FM20ENU.DLL) не были обновлены. Возможно, если вы не используете языковой пакет, у вас нет этой ошибки. На мой взгляд, детали языка также должны были быть обновлены (но обновления нет)

Хорошо, удаление .exd файлов работает на мгновение. Это временная работа. MS не имеет реального решения, но перекомпиляция кода "решает" проблему.

Вот почему некоторые люди сказали: "Добавить комментарий, и проблема решена". Да, добавление комментария заставляет перекомпилировать.

Я согласен, это по-прежнему работа, но не временная работа. Так: 1. проверьте, в какой части VBA-кода существует ошибка 2. добавьте комментарий, по которому принудительная перекомпиляция. 3. снова сохраните проект

что все

Ответ 16

У меня похожая проблема. Код VBA (ActiveX) отлично работал на компьютерах 20+ в течение нескольких лет, проблема неожиданно обнаружилась, когда к нему присоединился один новый коллега, код не работает на его новом ноутбуке, хотя версия для Excel такая же, показала Ошибка выполнения "32809". Я проверил все настройки безопасности ActiveX и Macro, все правильно. Я сделал несколько экспериментов. Я обнаружил, что код, созданный на моем компьютере, не будет работать на новом ноутбуке моего коллеги. Однако, если я создаю код на своем новом ноутбуке, он работает на моем компьютере. После того, как я сохранил этот код на своем компьютере, он больше не сможет работать на моем коллегном ноутбуке.

При детальной проверке ошибки проблема заключается в том, что весь код, написанный на моем компьютере, мой коллега Excel не распознает. Отладка >> Компиляция покажет ошибку компиляции, даже "DIM..." не распознается. Всем элементам управления ActiveX, Comboboxs, Buttons... имени свойства случайным образом был присвоен новый. Например, у меня есть кнопка с именем [AddNew], однажды открытая в моем коллеге на новом ноутбуке, она переназначается как [commandbutton54]. Он даже не может распознать имя существующего листа.

Изучив все решения, я обнаружил, что Удалить файл "*.exd" не работает (даже очистить корзину ".). Добавление комментариев" не работает...

В конце концов решение:

Шаг 1: Сделайте копию листов с кодами (листы без кода не требуются),

Шаг 2: Удалить оригинальные листы,

Шаг 3: переименуйте скопированный лист в оригинальное имя,

Это начинает работать. Я обнаружил, что все элементы управления ActiveX возвращают свое первоначальное имя в свойстве. Это заняло минуту. Надеюсь, что это поможет тем, кто сталкивается с той же проблемой. Примечание. Нет необходимости сохранять файл в *.txt или переименовывать в xlsx...

Ответ 17

Ошибка 32 809: копирование поврежденного листа на новый лист и изменение имени или удаление поврежденного листа работает для меня. Кроме того, я пошел к модулю SHEET поврежденного листа и удалил кодировку из модуля листов, связанного с поврежденным листом. Это также вылечило проблему для меня. [Модули листов могут иметь подпрограммы, которые запускаются событиями, специфичными для этого листа.] Так что в моем случае я думаю, что это был поврежденный модуль листа, а не поврежденные данные на самом листе.

Ответ 18

Удаление всех экземпляров *.exd разрешило это для меня.