按下取消按钮时,vba inputBox返回空字符串。按下确定后,它将返回其文本框中的任何文本。 inputBox的第三个位置参数是其文本框中的初始文本。此参数的默认值为“”。
在我的应用程序中,我使用inputBox要求用户在单击“添加记录”按钮时指定新记录的名称。如果他按下“取消”,没问题:似乎他改变了对新记录的看法。我退出了潜艇。
但是,如果他没有输入名称或输入名称并将其删除,我不想接受,而是使用msgBox告诉他必须指定一个唯一的记录名称。
但是,似乎使用vba inputBox并不是直接用空文本框来区分“取消”和“确定”之间的区别。我想知道如何做到这一点。
在寻找答案的过程中,我发现了几个类似于这个问题的问题,但没有一个问题可以解决我的问题。
有一种方法可以检查用户是否单击“取消”或刚刚输入空字符串。试试这个:
test = InputBox("Enter a value")
If StrPtr(test) = 0 Then
MsgBox "Cancel"
ElseIf Len(test) = 0 Then
MsgBox "No entry"
Else
MsgBox "Correct"
End If
然而,它是相当粗略的解决方案。你可以在这里阅读更多关于StrPtr函数的信息:What are the benefits and risks of using the StrPtr function in VBA?
我相信下面的代码将为您提供可行的强大解决方案。有关Application.InputBox方法和函数的更多信息,请访问Microsoft Docs。
Option Explicit
'Type Parameter of the Application.InputBox method tells
'the method to return a value of that type. Below I've shown
'having it return a text string
Public Const A_TEXT_STRING As Variant = 2
Sub Button1_Click()
Dim myVal As Variant
myVal = Application.InputBox("Enter Record Name", _
Title:="RECORD NAME", _
Type:=A_TEXT_STRING)
'If myVal equals the vbNullString type then
'the person pressed OK without entering any data
If myVal = vbNullString Then
MsgBox "Please Select a record", Buttons:=vbOKOnly, Title:="SELECT RECORD"
'if myVal is equal to False (boolean value) then the user pressed
'the Cancel button. By checking for not equal, that means that the user pressed
'Ok and entered a value. You'll need to handle the condition of valid values
ElseIf myVal <> False Then
Range("A1").Value2 = myVal
End If
End Sub