2015-02-28 6 views
1

У меня есть проект VBA Excel 2007, который отлично работает на моем компьютере и некоторых других, но на некоторых он обращается к ошибке 32809 в строке, которая ссылается на объект ActiveSheet. Я обнаружил, что на затронутых компьютерах объект ActiveSheet не распознается. Объект ActiveWorkbook работает нормально.Объект ActiveSheet, который не распознается на некоторых компьютерах

На пораженных компьютерах, если я создаю новую книгу, ссылку ActiveSheet и активировать затронутую книгу, объект ActiveSheet работает нормально; Я могу получить свойство Name для ActiveSheet.

На моем компьютере VBA компилируется в порядке. Но на затронутых компьютерах компиляция останавливается на строке «Option Explicit» и возвращает ошибку:

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

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

Мои мысли таковы:

  • странное поведение наводит на рабочей книги с коррупцией, но тот факт, что она отлично работает на некоторых компьютерах не предполагает. Все компьютеры находятся на Excel 2007 SP3.
  • С другой стороны, тот факт, что он работает нормально на некоторых компьютерах, но не на других, предлагает проблему с Excel на затронутых компьютерах.

Любые идеи?

UPDATE:

Пример кода, в соответствии с просьбой:

Sub main() 
    Debug.Print ActiveSheet.Name 
End Sub 

UPDATE # 2:

Думая, что это может быть книга с коррупцией, я перестроил книгу с нуля. Но у новой книги была та же проблема.

На компьютере, где произошла ошибка, я сохранил копию файла как xlsx, без макросов. Затем я закрыл и открыл этот файл, чтобы убедиться, что макросы исчезли. Затем я скопировал все VBA из исходного файла. Затем я перерегистрировался как xlsm, с макросами.

Этот файл отлично работал на пораженном компьютере, а также отлично работал на исходном компьютере.

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

Так или иначе, это дает мне неуклюжие обходные пути. Далее я попробую статью KB 3025036 «Ошибка в вставке объекта» после установки обновления безопасности MS14-082. Не то же сообщение об ошибке, но стоит попробовать.

+0

Проверить инструменты VBE ► Опции ► Общие ► Требовать объявление переменной. Выключите компьютеры, которые не будут компилироваться. Использование двусмысленного объявления переменной «... как Object» может запутать компилятор. – Jeeped

+0

@Jeeped: проблема не в том, что она не будет компилироваться; это то, что я пробовал. Проблема в том, что объект ActiveSheet не распознается. –

+1

Не это: http://blogs.technet.com/b/the_microsoft_excel_support_team_blog/archive/2014/12/11/forms-controls-stop-working-after-december-2014-updates-.aspx ?? –

ответ

0

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

Как обходной путь, я попытаюсь удалить/создать список в runtime, вместо того, чтобы использовать тот же элемент управления списком. Таким образом, это всегда новый список, созданный на этом компьютере.

UPDATE:

Оказалось, что проблема была плохое обновление Office - обновление KB2596927 из обновления MS14-082 в безопасности. У нас не было проблем еще в ноябре, когда это обновление появилось, но недавно наши корпоративные ИТ попытались удалить KB2596927 со всех компьютеров. Однако удаление некоторых из них было неудачным. KB2596927 все еще был на моем и некоторых других, но ушел от некоторых.

Я обнаружил, что если на компьютере, где возникла проблема, я удалил VBA и добавил его обратно, он работал на этом comptuter и на всех наших компьютерах. Но как только я модифицировал VBA на своем компьютере и сохранил его, и распространил эту книгу, проблема снова вернулась.

Так что я удалил обновление Office KB2596927, и это устранило проблему. Теперь я могу изменить VBA в книге на своем компьютере и распространять книгу, и она работает нормально для всех.

0

не могли бы вы разместить код, пожалуйста? Также нужно проверить, что вы не пытаетесь поместить объект Excel.ActiveSheet в объект Worksheet без проверки его типа. Activesheet также может быть объектом диаграммы (т. Е. Графическим листом).

Sub Example() 
    Dim ws As Excel.Worksheet 
    'Risks Error: 
    Set ws = Excel.ActiveSheet 
    'Safer: 
    If TypeOf Excel.ActiveSheet Is Excel.Worksheet Then 
     Set ws = Excel.ActiveSheet 
    Else 
     'Do something else:) 
    End If 
End Sub 

Для проверки против коррупции, копировать/вставить все в новую книгу, экспортировать модуль кода и повторно импортировать их в новую книгу, а затем компилировать. Если это будет исправлено, возможно, это была коррупция.

+0

Пример кода, добавленного выше. –

+0

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

Смежные вопросы