取消一个InputBox后退出子

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

我目前的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 

但是由于某些原因,它在点击取消或提示的angular落处的X时仍然进入循环。

我已经尝试过与VbNullString0""运气,但到目前为止,他们都没有工作,0结束与Run-time Error '13': Type Mismatch在if语句。

而不是使用pass = vbNullString作为你的条件,你可以使用pass = FALSE当用户点击取消时,它把值'FALSE'放到你的variables中。

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

当用户点击“确定”与application.inputbox ; 将该字段留空,则输出将为空string。

application.inputbox一大优点是它可以限制用户可以input的内容。如果你不需要任何限制,inputbox函数会更好。 当用户点击“确定”而不input任何内容,并且当用户点击“取消”

  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