2013-05-30 5 views
4

При нажатии моей кнопки CommandButton я хотел бы получить всплывающее окно с запросом «Эти изменения не могут быть отменены. Рекомендуется сохранить копию перед продолжением. Хотите продолжить?»Excel VBA: подтверждение при нажатии клавиши CommandButton

И я хочу иметь три варианта:

  1. Да - всплывающее окно закрывается и CommandButton Macro не выполняется
  2. Нет - Это закрывает всплывающее окно и ничего не меняет
  3. Сохранить - закрывает всплывающее окно и открывается «Сохранить как» (макрос не выполняется)

Я не знаю, с чего начать. Не могли бы вы дать мне руку?

Большое спасибо.

+3

Используйте VbMsgBoxStyle.vbYesNoCancel или создать новую форму. Если вы находитесь в Windows Vista или выше, вы можете использовать причудливые системные сообщения, но это довольно продвинутая тема. – Mike

+0

Я положил это сразу после моего подкода. Это приводит к следующей ошибке: «Недопустимое использование свойства». Как мне использовать этот код? Спасибо, Майк. – jcv

ответ

13

Вы можете использовать окно сообщения, но это несколько ограничено. Вы можете немного перефразировать вопрос, чтобы использовать кнопки vbYesNoCancel, так как Save As не является дополнительной кнопкой в ​​окне сообщений.

Тогда вы можете работать с результатом окна сообщения кнопки щелчку:

Dim mbResult as Integer 
mbResult = MsgBox("These changes cannot be undone. Would you like to save a copy before proceeding?", _ 
vbYesNoCancel) 

Select Case mbResult 
    Case vbYes 
     'Modify as needed, this is a simple example with no error handling: 
     With ActiveWorkbook 
      If Not .Saved Then .SaveAs Application.GetSaveAsFilename() 
     End With 
    Case vbNo 
     ' Do nothing and allow the macro to run 

    Case vbCancel 
     ' Do NOT allow the macro to run 
     Exit Sub 

End Select 
+3

+1 Также добавьте If Not ActiveWorkbook.Saved Затем, чтобы вы даже не спросили, сохранена ли книга. –

+0

@ DickKusleika спасибо за предложение, я добавил его. –

+0

Это отлично работает, спасибо большое :) – jcv

6

Предлагаю вам поставить код в верхней части вашего макроса, чтобы задать этот вопрос и ответить на ответ.

Это будет выглядеть примерно так:

Sub YourMacro() 

    if MsgBox("These changes cannot be undone. It is advised to save a copy before proceeding. Do you wish to proceed?", vbYesNo + vbQuestion) = vbNo then 
    exit sub 
    end if 

    ... the rest of your macro. 

Обратите внимание, что это не даст пользователю возможность сохранить. Вы не можете сделать это со стандартным MsgBox. Если вы хотите это сделать, вам нужно создать свою собственную пользовательскую форму, показать, что вместо MsgBox и ответить на какую кнопку в пользовательской форме, которую пользователь нажал. Для вас это намного больше, чем просто использование MsgBox, но если вы хотите, чтобы ваш пользовательский интерфейс был фантастическим, это может стоить того.

+0

Это отлично работает, спасибо большое :) – jcv

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