如何使用 MsgBox 在 VBS 中使用用户输入正确配置条件操作?
How do I properly configure conditional actions with user input in VBS with MsgBox?
我一直在尝试让 VBS 脚本与 msgbox 一起工作一段时间。当我使用单个 msgbox 语句时,它起作用了。一旦我开始添加条件输入选项,它就不起作用了。
我在 Super User 上 post 编辑了这个问题,我被告知要使用 "dim" 语句,并在这个网站上使用 post,我现在都做了。这是我正在尝试的一些有效代码。 (请忽略我的例子。)
Option Explicit
Dim vbsmsg, vbsyes, vbsno
vbsmsg=MsgBox("Proceeding will wipe the contents of your C: Drive. Proceed?", 1+48, "Format Drive C:")
当我通过快捷方式 运行 上面的代码时,我得到一个这样的对话框:
但是如果我添加以下内容,我在单击 "OK" 或 "Cancel"
时会出现 运行 次错误
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")
错误中的line/character在"System Error 303"
中的“0”和“3”之间
我已经尝试了大量的故障排除。我尝试过更改暗淡的语句、显式添加选项、使用 1 和 2 而不是 6 和 8 等等……似乎没有任何效果。当我注释掉第二部分时,它没有在执行文件后出现错误,而是对我关闭了。我确信我的所有语法都是正确的并且格式正确。我将 1 和 2 更改为 vbOK 和 vbCancel,当我将其更改回来时,它根本不起作用,并立即向我显示了此页面上显示的错误。
如果有人知道我的示例有什么问题,我将不胜感激。我对使用 VBS 文件还很陌生,但我已经使用 .bat 文件很长时间了,none 这些原则似乎在这里起作用,
我将不胜感激任何帮助,即使它很小,
试试这个例子:
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
的更多信息
虽然@Hackoo's is technically correct it doesn't answer the initial question,所以我会在这里尝试。
错误原因
Microsoft VBScript compilation error: Expected 'End'
是由于 If
语句跨越多于一行而没有 End If
来完成语句块,如 @Hackoo's 示例中添加 End If
将更正此问题错误。
如果出于某种原因你想保持语法简洁,那么你有两个选择;
将 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")
看起来有点难看,有时很难理解(但这只是我的意见)。
使用行继续符 (_
) 允许单个语句跨越多行,在 VBScript 中这也称为Statement Break.
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")
如前所述,不用说,您应该尽可能在代码中使用 VBScript 命名常量,而不是硬编码数值。
我一直在尝试让 VBS 脚本与 msgbox 一起工作一段时间。当我使用单个 msgbox 语句时,它起作用了。一旦我开始添加条件输入选项,它就不起作用了。
我在 Super User 上 post 编辑了这个问题,我被告知要使用 "dim" 语句,并在这个网站上使用 post,我现在都做了。这是我正在尝试的一些有效代码。 (请忽略我的例子。)
Option Explicit
Dim vbsmsg, vbsyes, vbsno
vbsmsg=MsgBox("Proceeding will wipe the contents of your C: Drive. Proceed?", 1+48, "Format Drive C:")
当我通过快捷方式 运行 上面的代码时,我得到一个这样的对话框:
但是如果我添加以下内容,我在单击 "OK" 或 "Cancel"
时会出现 运行 次错误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")
错误中的line/character在"System Error 303"
中的“0”和“3”之间我已经尝试了大量的故障排除。我尝试过更改暗淡的语句、显式添加选项、使用 1 和 2 而不是 6 和 8 等等……似乎没有任何效果。当我注释掉第二部分时,它没有在执行文件后出现错误,而是对我关闭了。我确信我的所有语法都是正确的并且格式正确。我将 1 和 2 更改为 vbOK 和 vbCancel,当我将其更改回来时,它根本不起作用,并立即向我显示了此页面上显示的错误。
如果有人知道我的示例有什么问题,我将不胜感激。我对使用 VBS 文件还很陌生,但我已经使用 .bat 文件很长时间了,none 这些原则似乎在这里起作用,
我将不胜感激任何帮助,即使它很小,
试试这个例子:
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
的更多信息
虽然@Hackoo's
错误原因
Microsoft VBScript compilation error: Expected 'End'
是由于 If
语句跨越多于一行而没有 End If
来完成语句块,如 @Hackoo's 示例中添加 End If
将更正此问题错误。
如果出于某种原因你想保持语法简洁,那么你有两个选择;
将
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")
看起来有点难看,有时很难理解(但这只是我的意见)。
使用行继续符 (
_
) 允许单个语句跨越多行,在 VBScript 中这也称为Statement Break.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")
如前所述,不用说,您应该尽可能在代码中使用 VBScript 命名常量,而不是硬编码数值。