【问题标题】:VBScript InputBox - How to identify when the Cancel button is pressed? [duplicate]VBScript InputBox - 如何识别何时按下取消按钮? [复制]
【发布时间】:2014-12-07 19:48:23
【问题描述】:

当按下取消按钮时,如何让我的 VBScript 取消进程?按“确定”时,我希望 VBScript 打开一个新的InputBox。我已经完成了这项工作,但我还想为“取消”按钮提供一个功能。一个可以阻止整个 VBScript 打开任何其他 MsgBoxInputBox 的函数。

我尝试过这样的事情:

Set shell = createobject("wscript.shell")
strtext = InputBox("text")
    vbCancel
If vbCancel then 
  WScript.Quit
End if

【问题讨论】:

    标签: vbscript


    【解决方案1】:

    来自MSDN

    当提供帮助文件和上下文时,帮助按钮是 自动添加到对话框中。

    如果用户单击确定或按 ENTER,则 InputBox 函数返回 文本框中的任何内容。 如果用户点击取消,函数 返回一个长度为零的字符串 ("")

    上面的粗体部分并不完全正确。
    用户可以通过多种方式取消 InputBox 对话框;通过关闭对话框、单击 Cancel 或按 ESCALT + F4 等。在所有情况下,除了按 或单击 OK 输入框返回 Empty(未初始化的变体,其值为 0 表示数字,零长度字符串 ("") 表示字符串隐含),这意味着对话框被解除。

    由于零长度字符串 ("") 和 Empty 变量之间存在隐式转换,因此按照 MSDN 的建议寻找零长度字符串等式并不总是合适的解决方案(例如在逻辑中零长度字符串表示“使用默认值”,而不是取消)。

    Dim retval
        retval = InputBox("txt")
    If IsEmpty(retval) Then
        'cancelled
        MsgBox "operation has been cancelled"
    Else
        'something has entered even zero-length
        MsgBox retVal
    End If
    

    【讨论】:

    • 有点工作,但在输入框之后它应该打开一个新的。
    • @AvatarLandRazer 不太好,只是有效。你是如何实施的?你可能会误解这个概念。简单地说,将输入框的结果分配给一个变量,然后检查该变量是否为空。就是这样。
    • 我实际上已经让整个脚本工作了,但现在是最后一件事。你的解决方案真的很有帮助。多谢。但是有没有办法通过按确定来重新启动脚本?
    • @JaroslavZáruba 这是一个vbscript 的问题,所以这个hacky 解决方案只适用于它。 Microsoft Office VBA 是一个完全不同的环境。与 VBScript 不同,VBA 中的 InputBox 函数似乎与documented 完全一样。
    • @JaroslavZáruba 今天我遇到了this。它在我的带有 Office 2016 的计算机上运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多