vba inputBox: как определить разницу между «отмена» и «ОК» с пустым текстовым полем - PullRequest
0 голосов
/ 05 сентября 2018

vba inputBox возвращает пустую строку при нажатии кнопки отмены. Когда нажата OK, он возвращает любой текст в своем текстовом поле. Третий позиционный аргумент inputBox - это исходный текст в его текстовом поле. Значением по умолчанию для этого аргумента является "".

В моем приложении я использую поле ввода, чтобы попросить пользователя указать имя новой записи, когда он нажимает кнопку «Добавить запись». Если он нажимает «отменить», нет проблем: кажется, он передумал об этой новой записи. Я выхожу из саб.

Однако, если он не может ввести имя или вводит его и удаляет его, я хочу НЕ принять это и вместо этого использовать msgBox, чтобы сказать ему, что он должен указать уникальное имя записи.

Однако, похоже, что с vba inputBox было бы не просто сказать разницу между «отмена» и «ОК» с пустым текстовым полем. Я хотел бы узнать, как это сделать.

При поиске ответа я нашел несколько вопросов, похожих на этот, но ни у одного из них не было достаточно полного ответа, чтобы решить мою проблему.

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Я полагаю, что приведенный ниже код предоставит вам надежное решение, которое работает. Дополнительную информацию о методе и функции Application.InputBox можно найти по адресу Документы Microsoft .

.
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
0 голосов
/ 05 сентября 2018

Существует способ проверить, нажал ли пользователь «Отмена» или просто ввел пустую строку. Попробуйте это:

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 здесь: Каковы преимущества и риски использования функции StrPtr в VBA?

...