如何使用MsgBox在VBS中使用用户输入正确配置条件操作?

时间:2016-04-11 15:43:00

标签: windows vbscript scripting runtime-error msgbox

我一直在尝试使用msgbox让VBS脚本工作一段时间。当我使用单个msgbox语句时,它可以工作。一旦我开始添加条件输入选项,它就不起作用。

我在超级用户上发布了这个问题,我被告知要使用“昏暗”的声明,并在这个网站上发帖,我现在已经完成了。以下是我正在尝试的一些代码。 (请忽略我的例子。)

Option Explicit
Dim vbsmsg, vbsyes, vbsno
vbsmsg=MsgBox("Proceeding will wipe the contents of your C: Drive. Proceed?", 1+48, "Format Drive C:")

当我通过快捷方式运行上面的代码时,我得到一个如下对话框: enter image description here

但如果我添加以下内容,单击“确定”或“取消”时会出现运行时错误

If vbsmsg=1 Then
    vbsyes=MsgBox("The contents of your C: Drive could not be successfully deleted.", 0+64, "Error Formatting Drive C: - System Error 5")
If vbsmsg=2 Then
    vbsno=MsgBox("Not all of the contents of your C: Drive were successfully deleted. Please try again.", 0+64, "Error Formatting Drive C: - System Error 303")

enter image description here

错误中的行/字符位于“系统错误303”中的“0”和“3”之间

我已经尝试了很多故障排除。我已经尝试改变昏暗的声明,添加选项显式,使用1和2而不是6和8等...似乎没有任何工作。当我注释掉第二部分时,不是在执行文件后出错,而是关闭了我。我很肯定我的所有语法都是正确的并且格式正确。我将1和2更改为vbOK和vbCancel,当我将其更改回来时它根本无法正常工作并立即给出了我在此页面上所显示的错误。

如果有人知道我的例子有什么问题,我将不胜感激。我对使用VBS文件相当陌生,但我已经使用.bat文件很长一段时间了,这些原则似乎都没有在这里工作,

我很感激任何帮助,即使它很小,

2 个答案:

答案 0 :(得分:2)

尝试这个例子:

Option Explicit
Dim Title,Question
Title = "user input in VBS with MsgBox"
Question = MsgBox("Proceeding will wipe the contents of your C: Drive. Proceed ?",vbYesNo+vbQuestion, Title)
If Question = vbYes Then
    MsgBox "We proceed wipping your C:\ drive",vbExclamation,Title
    'Call your sub here to continue proceeding your script
Else
    MsgBox "Canceling the operation !",vbCritical,Title
    Wscript.Quit()
End If

有关 MsgBox Constants

的详细信息

答案 1 :(得分:1)

虽然@Hackoo's answer在技术上是正确的,但它并没有回答initial question,所以我会尝试在这里。

错误原因

  

Microsoft VBScript编译错误:预期'结束'

是由于If语句跨越多行而没有End If来完成语句块,如@Hackoo's示例添加End If将更正此错误。

如果出于某种原因,你想保持语法浓缩,你不是很远,你有两个选择;

  1. If语句全部放在一行

    Option Explicit
    Dim vbsmsg
    vbsmsg = MsgBox("Proceeding will wipe the contents of your C: Drive. Proceed?", vbYesNo + vbQuestion, "Format Drive C:")
    
    If vbsmsg = vbYes Then Call MsgBox("The contents of your C: Drive could not be successfully deleted.", vbExclamation, "Error Formatting Drive C: - System Error 5")
    If vbsmsg = vbNo Then Call MsgBox("Not all of the contents of your C: Drive were successfully deleted. Please try again.", vbCritical, "Error Formatting Drive C: - System Error 303")
    

    看起来有点难看,有时很难跟上(但这只是我的意见)

  2. 使用行延续字符_允许单个语句跨越多行,在VBScript中,这也称为Statement Break。< / p>

    Option Explicit
    Dim vbsmsg
    vbsmsg = MsgBox("Proceeding will wipe the contents of your C: Drive. Proceed?", vbYesNo + vbQuestion, "Format Drive C:")
    
    If vbsmsg = vbYes Then _
        Call MsgBox("The contents of your C: Drive could not be successfully deleted.", vbExclamation, "Error Formatting Drive C: - System Error 5")
    If vbsmsg = vbNo Then _
        Call MsgBox("Not all of the contents of your C: Drive were successfully deleted. Please try again.", vbCritical, "Error Formatting Drive C: - System Error 303")
    
  3. 正如已经提到的,不用说你应尽可能在代码中使用VBScript命名常量而不是硬编码数值。