Почему IsNull (), IsEmpty (), Application.WorksheetFunction.Istext () не работает со списками? - PullRequest
0 голосов
/ 28 мая 2018

Я попробовал несколько вариантов ниже, и даже если я не выбираю или не набираю что-либо в поле со списком, MsgBox никогда не запускается.

Вариант 1:

Private Sub CommandButton1_Click()

If IsNull(cmbPaidTo.Text) = True Then
    MsgBox "Payee cannot be empty."
End If

Unload Me
UserForm1.Show

End Sub

Вариант 2:

Private Sub CommandButton1_Click()

If IsNull(cmbPaidTo) = True Then
    MsgBox "Payee cannot be empty."
End If

Unload Me
UserForm1.Show

End Sub

Вариация 3:

Private Sub CommandButton1_Click()

If IsEmpty(cmbPaidTo.Text) = True Then
    MsgBox "Payee cannot be empty."
End If

Unload Me
UserForm1.Show

End Sub

Вариация 4:

Private Sub CommandButton1_Click()

If IsEmpty(cmbPaidTo) = True Then
    MsgBox "Payee cannot be empty."
End If

Unload Me
UserForm1.Show

End Sub

Вариация 5:

Private Sub CommandButton1_Click()

If Application.WorksheetFunction.IsText(cbxPaidTo.Text) = False Then
    MsgBox "Payee cannot be empty."
End If

Unload Me
UserForm1.Show

End Sub

Вариация 6:

Private Sub CommandButton1_Click()

If Application.WorksheetFunction.IsText(cbxPaidTo) = False Then
    MsgBox "Payee cannot be empty."
End If

Unload Me
UserForm1.Show

End Sub

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

Вот как выглядит моя пользовательская форма: UserForm

Ящик, на который я указываю, - это тот, без текстовой метки.

Ответы [ 2 ]

0 голосов
/ 28 мая 2018
  • IsNull() следует использовать только для запросов доступа.Значение поля ввода не может быть Null.

  • IsEmpty() - Возвращает логическое значение, указывающее, была ли инициализирована переменная.В основном используется для диапазонов и ячеек в Excel. 1011 * MSDN *.cbxPaidTo.Text не может быть пустым, потому что это инициализированный объект.

  • .IsText() - здесь все немного по-другому.Даже пустая строка "" все еще считается текстом.И когда у вас ничего нет в вашей форме, он возвращает пустую строку.Проверьте это:


Sub TestMe()
    Debug.Print WorksheetFunction.IsText("")
End Sub

Возможным решением является проверка размера входа (как указано здесь) после тримминга.Как это:

If Trim(Len(cmbPaidTo) Then
0 голосов
/ 28 мая 2018

Попробуйте:

If len(cmbPaidTo) = 0 Then

Значением поля со списком всегда будет строка ""

...