До сохранения и после сохранения игнорируются при сохранении в виде вложения - PullRequest
4 голосов
/ 17 октября 2019

У меня есть код, который я поместил в Workbook_AfterSave и Workbook_BeforeSave. Это прекрасно работает и делает именно то, что я хочу;однако во время тестирования я обнаружил странную ситуацию, когда Excel не вызывает эти две функции при сохранении документа.

Если у меня открыт документ и я выбрал файл-> поделиться-> электронная почта-> отправить как вложениеЗатем Excel сохраняет мой документ и помещает его в сообщение электронной почты, никогда не вызывая Workbook_AfterSave и Workbook_BeforeSave (я подтвердил это, добавив всплывающее окно msgbox в Workbook_AfterSave и Workbook_BeforeSave, и оно определенно не всплывает при использовании отправки в виде приложения в Excel).

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

Справочная информация: мой код в Workbook_AfterSave и Workbook_BeforeSave скрывает вкладки, очень скрытыегде пользователь их вообще не видит. Пользователь может взломать книгу и просмотреть скрытые вкладки, используя это электронное письмо в качестве «функции» вложения.

Упрощение проблемы: создайте новую книгу без кода VBA, сохраните ее в виде файла .xlsm,Добавьте следующий код:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

   MsgBox "Before Save"

End Sub

Выберите файл-> поделиться-> электронная почта-> отправить как вложение. Обратите внимание, вы не получаете окно сообщения;однако, если вы внесли какие-либо изменения, они наверняка были сохранены =).

1 Ответ

1 голос
/ 18 октября 2019

У меня есть теория о том, что происходит, но нет реальных доказательств.

Когда вы открываете книгу, Excel делает копию в каталоге Temp. Все сделанные вами изменения вносятся во временную копию. При сохранении он заменяет файл, который вы открыли, временной копией, тем самым «записывая» ваши изменения на диск. Если вы закрываете без сохранения, он просто удаляет временную копию.

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

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

Это моя теория о том, почему это происходит именно так. Что с этим делать? Я не уверен. Думаю, я бы выяснил, как перехватить функцию «Отправить как вложение» в Backstage ленты, чтобы принудительно сохранить или просто запретить отправку этой книги без сохранения.

Если вы решите пойти по этому пути, выполните поискдля файла ленты Excel за кулисами, и вы должны найти некоторые инструкции о том, как изменить эту конкретную функцию.

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