Сохранить с помощью пользовательской формы, ошибка: не может отображаться модально - PullRequest
0 голосов
/ 24 февраля 2020

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

Public Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
UserForm1.Show
If UserForm1.Visible = True Then
    Cancel = False
    Exit Sub
End If
Cancel = True
MsgBox ("Please use the save form.")
End Sub

У меня есть кнопка в пользовательской форме, которая должна сохранить файл, содержащий код:

Sub SaveButton_Click()
Dim FileName As String
    FileName = FileNameTextBox.Value
    ActiveWorkbook.SaveAs FileName:=FileName
End Sub

К сожалению, это дает мне

400 ошибка: «Не удается показать модально».

Я не уверен, что это значит или как решить это. Пожалуйста, дайте мне знать, если есть лучший способ сделать это.

1 Ответ

3 голосов
/ 24 февраля 2020

UserForm1.Show показывает форму модально - это означает, что выполнение будет возобновлено только после следующей инструкции после , когда форма закрылась, и это означает, что If UserForm1.Visible = True всегда будет False ..., если вам повезло.

Если пользователь закрывает модальную форму красной кнопкой [x], тогда объект уничтожается, и If UserForm1 повторно порождает новую, а это экземпляр также не будет виден (потому что он никогда не показывался в первую очередь).

Вы можете попробовать показать форму немодально :

UserForm1.Show vbModeless

Теперь выполняется возобновит в этой области сразу после показа формы ... сделав условие UserForm1.Visible всегда True.

Удалить UserForm1.Show из обработчика BeforeSave: работа этого обработчика заключается в отмене сохранения, если форма не видна - , чтобы не показывать эту форму безоговорочно! - вы получаете эту ошибку "не удается отобразить модально", потому что вы пытаетесь показать модальную форму, которая уже отображается модально.

Читайте на пользовательской форме s и экземпляры по умолчанию в моем блоге Rubberduck .

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