我目前有一个如下所示的代码,用于输入密码以启动代码。我是VBA的菜鸟,所以请放轻松我。
问题:当出现输入框提示时,如果密码正确,则可以正常工作。如果它不正确,你会有更多的机会再次输入它,但是假设你不知道密码而想要关闭窗口,你就不能。 “x”选项和取消选项只会导致输入框提示刷新而不是关闭窗口。如何设置窗口关闭?
以下是书面形式的代码:
Sub Pword()
Dim Ans As Boolean
Const Pword As String = "black2"
Ans = False
Do While Ans = False
If InputBox("Please enter password to continue.", "Enter Password") = Pword Then
Ans = True
End If
Loop
Sheets("Workshop").Range("B15:B20") = ""
Sheets("Workshop").Range("B24:B29") = ""
Sheets("Workshop").Range("B33:B35") = ""
Sheets("Workshop").Range("E5:E11") = ""
Sheets("Workshop").Range("E15:E26") = ""
Sheets("Workshop").Range("H5:H17") = ""
MsgBox "All data has been cleared."
End Sub
答案 0 :(得分:4)
如果您需要将空字符串视为有效输入值,检查InputBox
实际取消的唯一方法是不将其结果与{{1 }或vbNullString
(两者都是""
)。
因此,您可以使用(未记录的)True
函数来确定StrPtr
调用是否返回了合法的空字符串,或者是否使用[X]或[取消]主动取消 ]按钮:
InputBox
将其与其他答案相结合,以获得可靠的“重试”机制。
答案 1 :(得分:2)
添加一项检查以查看它是否为空字符串,如下所示:
Dim sResult As String
Do While Ans = False
sResult = InputBox("Please enter password to continue.", "Enter Password")
If sResult = Pword Then
Ans = True
ElseIf sResult = "" Then
Exit Do ' or Exit Sub depending on what you want to happen afterwards
End If
Loop
答案 2 :(得分:2)
@braX建议是一个很好的解决方案。
此外,您可以将尝试限制为n
,在这种情况下,我将尝试限制为3
Dim sResult As String
Dim Attmp As Integer
Attmp = 0
Do While Ans = False
sResult = InputBox("Please enter password to continue.", "Enter Password")
If sResult = Pword Then
Ans = True
ElseIf sResult = "" Then
Attmp = Attmp + 1
If Attmp = 3 Then
Msgbox "Maximum attempts reached."
Exit Do
End If
End If
Loop