我正在创建一个允许用户输入密码的输入框,我希望它能够包含文本和数字。如果可能的话,我也希望允许使用特殊字符。
我目前对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.
我已经通过VbNullString
,0
和""
试试了我的运气,但到目前为止,它们都没有工作,而0结束时只有Run-time Error '13': Type Mismatch
言。
答案 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