При использовании And
/ Or
логической логики иногда требуются круглые скобки для обеспечения правильной оценки. Когда это было:
If Con1 And Con2 Or Con3 Then
Это интерпретировалось:
- Верны ли оба
Con1
и Con2
?
Или
Итак, я добавил скобки, чтобы читать:
If Con1 And (Con2 Or Con3) Then
Что будет интерпретироваться как:
И
- Является ли
Con2
или Con3
True?
Который, если я правильно понял ваш вопрос, это логика, к которой вы стремитесь. Однако это означает, что если и TextBox2
, и Textbox3
пусты, то не имеет значения, есть ли в TextBox1
что-либо; MsgBox
не произойдет , а остальной код будет.
Дальнейший логический анализ:
Поскольку Con1
- Len(TextBox1) = ""
- всегда преобразовывался в False
(см. Примечание 1 ниже) , проверка And
- Con1 And Con2
всегда была false
. Таким образом, единственный способ, которым оператор if
мог разрешить в true
, был, если Con3
разрешен в True
.
Поскольку Con3
было Len(TextBox3) > 0
, весь оператор if зависел от длины текста в TextBox3
!
Примечания:
Len(TextBox1) = ""
всегда будет равно false. Len()
возвращает число, а не строку. Я думаю, что вы случайно объединили два метода для проверки пустой строки. Либо TextBox1.Value = ""
или Len(TextBox1.Value) = 0
будет работать; однако комбинация не имеет смысла. Хотя мне потребовалось больше всего времени, чтобы набрать мой ответ, прежде чем я поймал это.
Лучше использовать для доступа к содержимому TextBox.Value
или TextBox.Text
вместо TextBox
.
Текущая проверка содержимого TextBox1
вызовет MsgBox
только тогда, когда TextBox1
пусто. Это исключает пробельные символы, такие как пробел. Если вам также нужен MsgBox
, когда есть только пробельные символы, попробуйте что-то вроде: Len(Trim(TextBox1.Value)) = 0
вместо того, что вы имели ранее (Len(TextBox1) = ""
).
Вы можете посмотреть другие предложения для этого здесь Вы также можете рассмотреть возможность добавления аналогичной проверки на TextBox2
и TextBox3
, если вы не хотите запускать MsgBox
, если они иметь символы пробела, но не символы без пробелов.
Private Sub SubmitCommandButtom_Click()
'Changed Len(TextBox1) = "" to Len(TextBox1.Value) = 0 as per explanation above.
'Added .Value to length checks
If Len(TextBox1.Value) = 0 And (Len(TextBox2.Value) > 0 Or Len(TextBox3.Value) > 0) Then
MsgBox "Unit Number must be entered to continue!"
Else
Sheets("Uneven Split Job Aid").Range("A2") = TextBox1.Value
Sheets("Uneven Split Job Aid").Range("B2") = TextBox2.Value
Sheets("Uneven Split Job Aid").Range("C2") = TextBox3.Value
'And any other code ....
End If