Я не буду первооткрывателем ошибки, но возможно добавлю в в свою карму чужого сэкономленного времени. Я мучился с этой ошибкой полгода, точнее удаленный клиент.
Имеем:
PC: AMD A6 5400K, 4Gb DDR 1333, простенькая мать, HDD WD Blue 250Gb, Win 7 x64 Prof, Office 2010 Std x32 SP1
Для офиса ПК нормальный, установил, пользователь радовался первые полгода
И тут началось, через раз выскакивает ошибка:
Выскакивала сначала при двух определенных открытых книгах.
Подозрение пало на них, размером они не отличились (116Кб и 104Кб), возраст, да, им лет пять-семь. Пересохранил в xlsx, почистил в OpenOffice, проблема не прошла.
При этом, эти же файлы используются другими пользователями (через DropBox), со старыми машинами и не жалуются.
Если другие файлы открывать прямо из экселя, то проблемы нет, если закрыть эти книги и открыть заново, тоже нормально. Открыл подряд 100 файлов, тоже ОК.
Пошел искать...
- Проверил объем потребляемой памяти, от 16 до 119МБ
- поднял кэш
- отключил антивирус
- отключил все красявости (Aero и т.п.)
- создал нового пользователя
- переустановил офис x32 SP2
- переустановил офис x64 SP2
- обновил драйвера на видеокарту
- Отключал предпросмотр файлов Excel в проводнике
И еще куча всего, сейчас и не вспомнишь.
Сегодня обратил внимание, что обе книги открываются одним процессом, раньше я не придавал этому значения, а тут подумал: "А что если?"
И кажется решение нашлось.
Подумал, а может открывать их разными процессами?
Был один клиент, который жаловался на то, что эксель открывает в одном окне все книги, он находил это неудобным при сравнении файлов.
Я использовал тоже решение и здесь:
Открываем реестр Пуск > Выполнить > regedit > OK
В реестре правим ветки:
HKEY_CLASSES_ROOT\Excel.Sheet.12\shell\Open\command
HKEY_CLASSES_ROOT\Excel.Sheet.8\shell\Open\command
Перед внесением изменений экспортируйте ветки:
Правой клавишей на раздел (Excel.Sheet.12) > Экспортировать. Тоже самое для Excel.Sheet.8
Для default меняем "/dde" (2010) или "/e" (2007) на конце на "%1", для параметра command меняем окончание также.
Переименовываем раздел ddeexec и перезагружаемся.
В картинках, до:
И после изменения:
Проверяем, в разных ли окнах открываются книги или нет, если нет ищем ошибки.
Т.о. на каждую книгу выделяется отдельный процесс. Здесь есть свои минусы и плюсы, из плюсов:
- Разные окна (многозадачность рулит)
- Разные процессы (вроде как решает проблему)
- Если книга зависнет, можно будет убить только ее, а не все ;-)
Решение находится на тестировании и не является истиной в первой инстанции.
После каждого обновления требуется вносить изменения в реестр.
Ап 14.09.2015 Тест прошел успешно на ПК менеджера, за месяц ни одной ошибки.
Ап 20.10.2015 В комментариях указали на недостаток метода, а именно,
перестают работать короткие
гиперссылки на ячейки в других книгах.
Короткими ссылками я назвал ссылки такого вида:
=J241+'[hot-key.xlsx]Лист1'!$F$12
Для того, чтобы ссылки снова заработали, необходимо их изменить, указав полный путь к книге, либо вручную:
=J241+'C:\Users\aa\Dropbox\[hot-key.xlsx]Лист1'!$F$12
для продвинутых:
=Excel.Sheet.12|'C:\Users\aa\Dropbox\hot-key.xlsx'!'!Лист1!R12C6'
Либо попробовать в полуавтоматическом режиме:
Имеем:
Открываем данные - изменить связи:
Как видим, поле расположение пустое, т.е. Excel знает название книги, но не ее расположение.
Нажимаем Изменить, Откроется окно выбора файла, выбираем файл, жмем Ок/Открыть. Расположение должно измениться, а состояние ОК.
Выделяем следующий источник и выполняем ту же операцию.
Все формулы на листе обновятся к шаблону показанному выше.
При последующих открытиях возможно предупреждение:
Спокойно нажимаем обновить.
Для того чтобы обновить данные в ходе работы над книгой, снова открываем изменение связей и нажимаем обновить, для каждой связи.
ВНИМАНИЕ Это не 100% решение проблемы, это "костыль", т.е. не у всех может сработать. На большом количестве окон ошибка может повториться (более 20).
Если у кого есть другие варианты, добро пожаловать в комментарии.