#excel #vba #save #save-as #before-save
#excel #vba #Сохранить #сохранить как #перед сохранением
Вопрос:
Я не могу найти какой-либо код, который ТОЛЬКО отключает функциональность сохранения, не отключая сохранение.
Приведенный код очень эффективен для отключения СОХРАНЕНИЯ и СОХРАНЕНИЯ КАК, но я хочу, чтобы пользователи могли сохранять данные, но НЕ имели возможности сохранять, чтобы они не могли создать версию рабочей книги. (копирование файла в файловом менеджере в этом случае не проблема — проблема просто в сохранении.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim xName As String
xName = "CancelBeforeSave"
If Not Evaluate("=ISREF('" amp; xName amp; "'!A1)") Then
Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = xName amp; ""
Sheets(xName amp; "").Move after:=Worksheets(Worksheets.Count)
'To edit macros disable by changing to True
'Need to open workbook first with macros disabled
Sheets(xName amp; "").Visible = False
Exit Sub
End If
'To edit macros disable by changing to False
'Need to open workbook first with macros disabled
Cancel = True
End Sub
Я бы ожидал, что при открытии книга не разрешит сохранение, не затрагивая другие открытые книги.
Альтернативно из предоставленного мной кода, если мы можем просто повторно включить функцию сохранения, также было бы приемлемо.
Ответ №1:
Просто проверьте, имеет ли SaveAsUI
значение true, и отмените сохранение.
Option Explicit
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If SaveAsUI Then
MsgBox "Save As is disabled", vbInformation
Cancel = True
End If
End Sub
В документации к книге.Событие beforeSave вы можете найти:
SaveAsUI
True
если из-за внесенных изменений, которые необходимо сохранить в книге, будет отображено диалоговое окно «Сохранить как«.
Обратите внимание, что это не функция безопасности.
Это не позволяет пользователям использовать диалоговое окно «Сохранить как». Но с помощью некоторого кода VBA на любом другом листе Excel вы можете легко обмануть это. Все, что вы делаете, чтобы попытаться запретить реальное сохранение как, можно обойти. Это не будет функцией безопасности. Это просто для предотвращения сохранения как «случайно». Любой, кто действительно хочет сделать сохранение как и знает, как это обмануть, все равно сможет это сделать.
Комментарии:
1. Итак, если сохранение запускается с помощью хитрости, может ли мой код VBA распознать, что было запущено сохранение как, и, например, скрыть все важные листы в новом файле сохранения??
2. @SimonJacobs Нет, хитрость в том, чтобы отключить VBA, а затем использовать SaveAs. Таким образом, ваш VBA не сможет ничего запускать, потому что он отключен. Если пользователь может открывать и читать файл, вы не можете запретить пользователю копировать или сохранять данные в другой файл.