Проверьте несколько текстовых полей одновременно на наличие пробелов - PullRequest
1 голос
/ 19 апреля 2020

Я хочу проверить три разных текстовых поля в форме (но не все), чтобы увидеть, если они остались пустыми. Сравнимо с «If IsBlank» в электронной таблице. Из того, что я прочитал, кажется, что IsEmpty не может быть использован таким образом? Я играл с IsNull, но не нашел правильный синтаксис, который позволил бы ему работать. Конечно, должен быть какой-то простой, даже стандартный, способ сделать это? Может быть, какая-то другая функция, о которой я никогда не слышал?

(я знаю, что могу использовать If Txtbx1.value = "" Or If... (etc.) - я ищу более короткий и более изящный способ сделать это.)

Спасибо !

Ответы [ 2 ]

1 голос
/ 19 апреля 2020

Рассмотрите возможность использования ИЛИ :

Sub dural()
    If Txtbx1.Value = "" Or Txtbx2.Value = "" Or Txtbx3.Value = "" Then
        MsgBox "at least one empty"
    End If
End Sub
0 голосов
/ 19 апреля 2020

Матч против набора Array of Text Boxes. IsError, VarType и TypeName

Все коды были в листе кода формы пользователя и запускались с помощью командных кнопок в форме пользователя, где также находились три текстовых поля.

В первом коде результат Match передается в переменную var (вариант) и подвергается дальнейшей оценке. Если есть хотя бы одно текстовое поле без значения ("" или vbNullString), var вернет позицию первого найденного пустого текстового поля на основе 1, т.е. первое - 1, второе - 2 et c. в отличие от массива, основанного на 0, т. е. первый элемент равен 0, второй - 1 и т.д. c.

Второй код представляет собой представление трех вариантов, которые были изучены в первом коде.

Третий код - это «плохой» код без переменных, которые вы, возможно, искали.

Sub TextBoxFun()

    Dim vntTB As Variant    ' Text Box Array
    Dim var As Variant      ' Match Variant
    Dim strTB As String     ' Pass String
    Dim lngTB As Long       ' Pass Long

    ' Pass TextBoxes to Text Box Array.
    vntTB = Array(TextBox1, TextBox2, TextBox3)
    ' Either:
    var = Application.Match("", vntTB, 0)
    ' Or:
    'var = Application.Match(vbNullString, vntTB, 0)

                                            Debug.Print String(10, "'")
    Debug.Print "IsError(var)  = " & IsError(var)    ' True
    Debug.Print "VarType(var)  = " & VarType(var)    ' 10 or vbError
    Debug.Print "TypeName(var) = " & TypeName(var)   ' Error
                                            Debug.Print String(10, "'")

    ' Line of Code / vbNullString Found ? >>> '  True        False
    Debug.Print var                           '     1
    ' Depending on the first position of      '     2
    ' the found vbNullString or "".           '     3   Error 2042
    lngTB = IsError(var): Debug.Print lngTB   '     0           -1
    lngTB = VarType(var): Debug.Print lngTB   '     5           10
    'lngTB = TypeName(var): Debug.Print lngTB '  Nope         Nope
    ' TypeName returns always a string.
    strTB = IsError(var): Debug.Print strTB   ' False         True
    strTB = VarType(var): Debug.Print strTB   '     5           10
    strTB = TypeName(var): Debug.Print strTB  ' Double       Error

End Sub

Sub TextBoxFunConclusion()

    Dim vntTB As Variant    ' Text Box Array

    ' Pass TextBoxes to Text Box Array.
    vntTB = Array(TextBox1, TextBox2, TextBox3)

    If IsError(Application.Match("", vntTB, 0)) Then
        Debug.Print "No 'empty' text boxes (via IsError)."
    Else
        Debug.Print "At least one 'empty' text box (via IsError)."
    End If

    If VarType(Application.Match("", vntTB, 0)) = 10 Then
        Debug.Print "No 'empty' text boxes (via VarType)."
    Else
        Debug.Print "At least one 'empty' text box (via VarType)."
    End If

    If TypeName(Application.Match("", vntTB, 0)) = "Error" Then
        Debug.Print "No 'empty' text boxes (via TypeName)."
    Else
        Debug.Print "At least one 'empty' text box (via TypeName)."
    End If

End Sub

Sub TextBoxFunMyChoice()

    If IsError(Application.Match("", Array(TextBox1, TextBox2, TextBox3), 0)) _
      Then
        Debug.Print "No 'empty' text boxes (via IsError)."
    Else
        Debug.Print "At least one 'empty' text box (via IsError)."
    End If

End Sub



Private Sub CommandButton1_Click()
    TextBoxFun
End Sub

Private Sub CommandButton2_Click()
    TextBoxFunConclusion
End Sub

Private Sub CommandButton3_Click()
    TextBoxFunMyChoice
End Sub
...