VBA 如果调用 Msgbox 的语句总是调用 msgbox

VBA If statement to call Msgbox always calls msgbox

我正在尝试使用 if 语句检查空白,return 如果有空白字段则使用 msgbox。如果没有空白字段,它 运行 是另一个代码块。然而,即使您填写了所有字段,msgbox 也总是 returned 而下一个代码块不会 运行。我是 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

您将引用这样的范围:

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 

C7 不是范围。 C9C11C13C17

也不是

[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