Excel VBA: подтверждение при нажатии кнопки CommandButton

при нажатии моей командной кнопки я хотел бы иметь всплывающее окно, которое спрашивает: "эти изменения не могут быть отменены. Рекомендуется сохранить копию перед продолжением. Хотите продолжить?"

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

  1. да-всплывающее окно закрыто и выполняется макрос CommandButton
  2. нет - это закрывает всплывающее окно и ничего не меняется
  3. Save-закрывает всплывающее окно и открывает "Сохранить как" (макрос не казнен)

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

большое вам спасибо.

2 ответов


вы можете использовать окно сообщения, но несколько ограничены. Вы можете немного перефразировать вопрос, чтобы использовать 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

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

Это будет выглядеть так:

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, но если вы хотите, чтобы ваш пользовательский интерфейс был причудливым, это может стоить того.