Excel VBA только для чтения заменяет BeforeSave - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть код, который включает в себя бизнес-логику для сохранения документов (Excel 365), чтобы обеспечить надлежащее соглашение об именах, расположение файлов и т. Д. В качестве вспомогательной Workbook_BeforeSave

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Cancel = True  ''Cancels the Save from the button push or Ctrl+S
Application.EnableEvents = False
'' code code code
Application.EnableEvents = True
End Sub

Проблема заключается в том, что если файл открывается какТолько для чтения (как и в большинстве случаев) Excel предложит «файл только для чтения» (рис. А) и перейдет на экран «Сохранить как» на ленте файла (рис. Б).Сабвуфер Workbook_BeforeSave не включится, пока не будет нажата кнопка SAVE.Он также не покинет этот экран даже после запуска сабвуфера.Есть ли способ:

  1. Получить перед приглашением только для чтения ... или
  2. Написать какой-нибудь код, чтобы убрать экран Сохранить как?

MS Только для чтения (рис. А) Сохранить как экран (рис. Б)

Огромное спасибо заранее!

1 Ответ

0 голосов
/ 21 февраля 2019

Это не идеальный подход, но попробуйте это.Это полностью отменит сохранение, даже после нажатия кнопки Сохранить, вы можете добавить свой собственный код сохранения.

Редактировать: только что понял, что приведенный ниже код не останавливает предупреждение только для чтения, но когда вы нажимаете Сохранить, он отменяетСохранить и закрыть меню Сохранить как.Однако, когда они используют Ctrl + S, клавиши отправки {ESC} запускают Ctrl + ESC, открывающий звездное меню ...

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    'Disable Read Only Alert
    Application.DisplayAlerts = False
    'Disable Events
    Application.EnableEvents = False
    'Cancel Save
    Cancel = True
    'Do whatever code you need in here
    '
    'Mark Workbook as Saved, allowing for the file to close without an alert even if not saved
    ThisWorkbook.Saved = True
    'Send Escape Key to leave Save As Menu
    Application.SendKeys "{ESC}", 1
    'Enable Events
    Application.EnableEvents = True
    'Enable Alerts
    Application.DisplayAlerts = True
End Sub
...