VBA Если оператор для вызова Msgbox всегда вызывает msgbox - PullRequest
1 голос
/ 06 апреля 2020

Я пытаюсь использовать оператор if, чтобы проверить наличие пробелов и вернуть msgbox, если есть пустые поля. Если нет пустых полей, выполняется другой блок кода. Однако даже когда вы заполняете все поля, msgbox всегда возвращается и следующий блок кода не запускается. Я довольно плохо знаком с VBA и пишу код на общем языке, поэтому любые советы будут полезны.

Код вопроса:

'Check required fields
    If IsEmpty(C3) Then
        MsgBox ("Fill out all required fields")
    ElseIf IsEmpty(C7) = True Then
        MsgBox ("Fill out all required fields")
    ElseIf IsEmpty(C9) = True Then
        MsgBox ("Fill out all required fields")
    ElseIf IsEmpty(C11) = True Then
        MsgBox ("Fill out all required fields")
    ElseIf IsEmpty(C13) = True Then
        MsgBox ("Fill out all required fields")
    ElseIf IsEmpty(C17) = True Then
        MsgBox ("Fill out all required fields")
    Else

Ответы [ 2 ]

4 голосов
/ 06 апреля 2020

Вы бы указали диапазон, подобный этому:

If Len(Range("C3").Value) = 0 Then
    MsgBox "Fill out all required fields"

Но короче сделать что-то вроде этого:

If Application.CountA(Range("C3,C7,C11,C13,C17")) < 5 Then
    MsgBox "Fill out all required fields"
End if 
0 голосов
/ 06 апреля 2020

C7 не является диапазоном. C9, C11, C13 или C17

[C7] не являются диапазоном. Однако, лучший способ написать это было бы ActiveSheet.Range("C7") или ActiveSheet.Cells(7,3)

После этого вы можете делать изящные вещи, например, использовать Обработка ошибок и SpecialCells:

On Error GoTo NoErrors
Dim BlankFields AS Long
BlankFields = ActiveSheet.Range("C7,C9,C11,C13,C17").SpecialCells(xlCellTypeBlanks).Count
MsgBox "Fill out all required fields" & vbCrLf & BlankFields & "field(s) remaining"
NoErrors:
On Error GoTo 0
...