vba inputBox:如何使用空白文本框分辨“取消”和“确定”之间的区别

时间:2018-09-05 09:15:23

标签: vba input user-controls cancellation

按下取消按钮时,vba inputBox返回一个空字符串。当按下确定时,它将返回其文本框中的任何文本。 inputBox的第三个位置参数是其文本框中的初始文本。此参数的默认值为“”。

在我的应用程序中,当用户单击“添加记录”按钮时,我使用inputBox要求用户指定新记录的名称。如果他按“取消”,那没问题:似乎他改变了对新唱片的想法。我退出潜艇。

但是,如果他没有输入名称,或者输入名称并将其删除,我不想接受该名称,而是使用msgBox告诉他他必须指定唯一的记录名称。

但是,似乎对于vba inputBox而言,用一个空的文本框来区分“取消”和“确定”之间的区别似乎并不直接。我想找出方法。

在寻找答案时,我发现了几个与此问题类似的问题,但是没有一个答案足以解决我的问题。

2 个答案:

答案 0 :(得分:1)

有一种方法可以检查用户是否单击了“取消”或只是输入了空字符串。 试试这个:

NSTableView

但是,这是一个非常粗略的解决方案。您可以在此处阅读有关StrPtr函数的更多信息: What are the benefits and risks of using the StrPtr function in VBA?

答案 1 :(得分:0)

我相信下面的代码将为您提供可靠的解决方案。可以在Microsoft Docs上找到Application.InputBox方法和函数的更多信息。

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