取消InputBox后退出sub

时间:2017-07-31 16:59:18

标签: excel vba excel-vba

我正在创建一个允许用户输入密码的输入框,我希望它能够包含文本和数字。如果可能的话,我也希望允许使用特殊字符。

我目前对InputBox的看法是:

Sub NewPass()
Dim Pass As String, OldPass As String, ws As Worksheet

OldPass = Ark2.Range("B6").Value
Pass = Application.InputBox("Enter new password", Type:=2)
If Not Pass = vbNullString Then

    For Each ws In ThisWorkbook.Worksheets
        ws.Unprotect Password:=OldPass
        ws.Protect Password:=Pass, UserInterfaceOnly:=True
    Next

    Ark2.Range("B6").Value = Kode

End If
End Sub

但由于某种原因,它仍然在点击取消时进入循环或在提示的角落进入X.

我已经通过VbNullString0""试试了我的运气,但到目前为止,它们都没有工作,而0结束时只有Run-time Error '13': Type Mismatch言。

1 个答案:

答案 0 :(得分:2)

您可以使用pass = vbNullString而不是使用pass = FALSE作为条件。当用户点击取消时,它会将值'FALSE'放入您的变量中。

由于您在用户点击取消时使用application.inputbox,因此它将返回FALSE而不是null。如果你只使用pass = inputbox(...),它会给你一个空字符串。

当用户使用application.inputbox点击“确定”时;将该字段留空,输出将为空字符串。

application.inputbox的一大优势是它可以限制用户可以输入的内容。如果您不想要任何限制,输入框功能会更好。当用户单击“确定”而不键入任何内容以及用户点击“取消”时,它返回null

 Sub NewPass()
 Dim Pass As String, OldPass As String, ws As Worksheet

 OldPass = Ark2.Range("B6").Value
 Pass = InputBox("Enter new password")
 If Not Pass = VBNullSTring Then

    For Each ws In ThisWorkbook.Worksheets
        ws.Unprotect Password:=OldPass
        ws.Protect Password:=Pass, UserInterfaceOnly:=True
    Next

Ark2.Range(WB6").Value = Kode

End If
End Sub