2016-08-22 2 views
0

Я хотел создать небольшой макрос, который заставляет пользователя использовать диалог SaveAs в MS Excel 2010 («MS Office Professional Plus 2010» на случай, если это имеет значение) вместо того, чтобы просто сохранить файл под то же имя. Я сохранил эту процедуру под объект рабочей книги:xlDialogSaveAs делает аварийную ситуацию Excel

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) 
    If Not SaveAsUI Then 
     msg = "Use the 'Save As' dialog to save a new version of the file" 
     Style = vbOKCancel 
     Query = MsgBox(msg, Style) 
     If Query = vbOK Then 
      Application.Dialogs(xlDialogSaveAs).Show 
     ElseIf Query = vbCancel Then 
      Cancel = True 
     End If 
    End If 
End Sub 

Это все работает хорошо: я нажимаю «Ctrl-S» и получить приглашение. Я нажимаю «ОК» и использую диалог SaveAs, чтобы сохранить файл под другим именем. Но как только я нажму кнопку «Сохранить» в диалоговом окне, Excel сработает.

Возможно, я использую команду xlDialogSaveAs неправильно, но я просто не могу понять, почему это не работает. В отладчике нет сообщений об ошибках. В книге нет другого кода VBA в другом месте. Я пытаюсь сохранить книгу как файл .xlsm (диалог SaveAs корректно по умолчанию).

Есть ли кто-нибудь, кто может мне помочь?

+0

Я только попробовал (Excel 2013) и работает на меня. Какая версия Excel у вас есть? Какой тип файла вы сохраняете как? Вы пробовали разные имена файлов? У вас есть другой код в этой книге? –

+0

Привет, Майкл, приятно знать, что, по крайней мере, мой подход не был полностью неправильным ...! Я использую Excel 2010. Может быть, но это было бы удивительно, потому что я нашел эту команду в нескольких старых записях форума. В диалоговом окне SaveAs по умолчанию используется значение «.xlsm», и я сохраняю это как таковое. Все, что я делаю, это изменение имени. Я пробовал разные имена, но безрезультатно. В книге нет другого кода. –

+0

Превосходит крах, если вы просто используете SaveAs? Это крушение независимо от того, где вы пытаетесь сохранить его и какое имя вы ему даете? Сохраняет ли файл, а затем сбой или сбой, прежде чем он будет сохранен? –

ответ

1

Попробуйте,

If Query = vbOk Then 
    Application.Dialogs(xlDialogSaveAs).Show 
End If 
Cancel = True. 

Я подозреваю, что есть проблемы при попытке сохранить в первоначальном вызове и пытается сохранить в новом диалоге вы открыть

Смежные вопросы