Excel VBA:按下命令按钮的确认

9
按下 CommandButton 后,我想要一个弹出窗口问:“这些更改无法撤销。建议在继续操作之前保存副本。您是否要继续?”
我希望有三个选项:
  1. 是 - 弹出窗口关闭并执行 CommandButton 宏
  2. 否 - 这将关闭弹出窗口且不做任何更改
  3. 保存 - 关闭弹出窗口并打开“另存为”(宏未执行)
我不知道如何开始这个操作,请你给我帮助好吗?
非常感谢!

3
请使用VbMsgBoxStyle.vbYesNoCancel或创建新窗体。如果您使用的是Windows Vista或更高版本,则可以使用高级系统消息框,但这是一个比较高级的话题。 - Mike
我将此代码放在子代码开始后面。这会产生以下错误:“属性的使用无效”。我需要如何使用此代码?谢谢Mike。 - jcv
2个回答

22

您可以使用消息框,但这有些受限。您可以稍微重新表述问题,以使用 vbYesNoCancel 按钮,因为“另存为”不是消息框上的可选按钮。

然后,您可以使用消息框按钮单击的结果进行操作:

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
同时添加一个 If Not ActiveWorkbook.Saved Then 条件,这样即使工作簿已经保存,也不会再次询问。 - Dick Kusleika

10

我建议您在宏代码的顶部放置询问问题和回答的代码。

代码应该类似于这样:

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要更费力,但如果您希望您的用户界面更加花哨,那么这可能是值得的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接