Excel VBA ThisWorkbook.Saved = True не работает должным образом - PullRequest
1 голос
/ 19 июня 2019

У меня есть файл excel, многоязычный и используемый различными сотрудниками.Поэтому я создал код, который запускается при открытии книги (Initialize Sub).Что он делает, так это в основном выясняет текущие настройки и язык текущих пользователей и соответствующим образом готовит книгу Excel.Он изменяет значения различных ячеек на нужный язык, устанавливает заголовки кнопок, заполняет поля со списком соответствующими строками и т. Д. ...

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

Я хотел этого избежать, поэтому после того, как я выполню всю инициализациюЯ попытался использовать ThisWorkbook.Saved = True, чтобы предотвратить приглашение сохранения (см. Пример кода).Но по какой-то причине это не работает.

Вот мой код:

Private Sub Workbook_Open()
    Call Initialize
    ThisWorkbook.Saved = True
End Sub

Единственное объяснение состоит в том, что после завершения события Workbook_Open должно произойти что-то, что изменит рабочую книгу ... но японятия не имею, что это будет.Я подозревал, что некоторые формулы могут пересчитываться из-за изменений, поэтому я также попытался вручную пересчитать каждый лист как часть Initialize Sub, но это не помогло.

Я, очевидно, попытался просто сохранить файл:

Private Sub Workbook_Open()
    Call Initialize
    ThisWorkbook.Save
    ThisWorkbook.Saved = True
End Sub

Когда я это сделал, это вроде работало - приглашение сохранить не отображалось.Но поскольку во время инициализации было сделано много изменений, сохранение занимает довольно много времени и делает файл Excel очень «запаздывающим» при открытии.Также по какой-то причине он останавливается при закрытии ... Я имею в виду, когда я вручную сохраняю файл, а затем закрываю его, он немедленно закрывается.Но когда я помещаю ThisWorkbook.Save в событие Workbook_Open и открываю файл (он задерживается при открытии), а затем пытаюсь сразу же закрыть файл, я не получаю подсказку (что хорошо), но для этого требуется около 1015 секунд, чтобы закрыться по какой-то причине.

Наконец, я очень озадачен поведением в этих двух сценариях ... потому что, когда я просто использую:

ThisWorkbook.Saved = True

, я получаю приглашение,это означает, что должно было произойти что-то, что превратило его в «ложь».

Но когда я использую оба:

ThisWorkbook.Save
ThisWorkbook.Saved = True

, я не получаю подсказку, что означает, что «вещь», котораяПревратил его в ложь в первом случае не происходит ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...