Сбой Excel, пользовательская форма VBA не может сохранить

У меня есть пользовательская форма в Excel, в которой пользователь вводит информацию, а затем нажимает кнопку «добавить запас». При нажатии этой кнопки информация вводится в электронную таблицу, а затем электронная таблица сохраняется с помощью «ActiveWorkbook.Save».

Проблема в том, что рабочие компьютеры старые, а Excel имеет тенденцию к сбоям. При автовосстановлении таблицы функция добавления запаса больше не работает, вылетает с ошибкой кода 75. Кажется, что ActiveWorkbook.Save в этом случае не работает, пока пользователь вручную не нажмет CTRL-S. Босс непреклонен в том, что наши пользователи недостаточно разбираются в компьютерах, чтобы справиться с этим, поэтому мне нужно как-то проверить, не произошел ли сбой Excel, и если да, то автоматически сохранить файл, прежде чем они начнут его использовать.

Как мне проверить, находимся ли мы в состоянии автоматического восстановления, а затем сохранить его (без ActiveWorkbook.Save), чтобы пользователь мог продолжать использовать форму без проблем? Большое спасибо.


person user2151763    schedule 05.04.2013    source источник
comment
Ошибка VBA 75 - это ошибка доступа к файлу/пути, под сбоем вы имеете в виду, что VBA останавливается? Если это так, добавьте обработку ошибок вокруг метода сохранения.   -  person Alex K.    schedule 05.04.2013
comment
Нет, у Excel есть привычка к полному сбою, всему приложению, принудительному перезапуску, а затем процедурам автовосстановления.   -  person user2151763    schedule 05.04.2013
comment
И это независимо от того, используется ли пользовательская форма.   -  person user2151763    schedule 05.04.2013
comment
Будет ли добавление Application.Sendkeys("^S") работать, если вы можете проверить, что ActiveWorkbook.Save не сохраняет файл?   -  person Skip Intro    schedule 05.04.2013
comment
Босс хочет, чтобы он проверял, находимся ли мы в режиме автоматического восстановления при инициализации пользовательской формы, а затем сохранял файл. НЕ при использовании функции добавления запаса.   -  person user2151763    schedule 05.04.2013
comment
При открытии формы проверьте наличие файла Autorecovered в Application.AutoRecover.Path?   -  person Skip Intro    schedule 05.04.2013


Ответы (1)


Я не могу найти прямой способ проверить это, но вот пара неуклюжих вариантов. Кажется, что если есть два состояния книги, в которых может находиться книга с автоматическим восстановлением: Последнее сохранение пользователем или Автосохранение. Заголовок отражает состояние, в котором он находится. Эта функция проверит наличие этой фразы в заголовке.

Public Function IsInAutoRecoverMode(wb As Workbook)

    Dim wn As Window

    Set wn = wb.Windows(1)

    IsInAutoRecoverMode = _
        wn.Caption Like "*[Autosaved]?" Or _
        wn.Caption Like "*[Last saved by user]?"

End Function

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

При последнем сохранении пользователем свойство Workbook.Path указывает место, где хранится файл. При автосохранении свойство Workbook.Path равно Application.AutoRecover.Path. Ну, они равны на моей машине. Может это просто совпадение, но я в этом сомневаюсь.

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

Убедитесь, что вы сказали своему боссу, что эти обходные пути, потому что вы очень трудолюбивы и изобретательны, но они не задокументированы и могут потерпеть неудачу в любой момент. По крайней мере, я бы не стал их использовать, не понимая, что они основаны на каких-то догадках. Дайте нам знать, чем вы закончили.

person Dick Kusleika    schedule 05.04.2013