VBA验证非连续范围是否包含值

时间:2017-04-10 18:21:45

标签: excel-vba vba excel

我尝试创建一个宏来验证是否填写了非连续范围,然后在包含值的最后一行之后删除空行。

Sheet to validate

在上图中,列A,D,G,H,I是必填字段。如果包含值,则其余必填字段也必须包含值。绿色突出显示的单元格是通过验证的输入示例,而黄色则需要失败,因为A和G中的值未填写。

我已尝试过以下内容:

Sub Validate()
Dim Cell As Range
For Each Cell In Union(Range("A2:A3"), Range("D2:D3"), Range("G2:G3"), Range("H2:H3"), Range("I2:I3"))
    If IsEmpty(Cell) Then
        MsgBox ("Error: All mandatory fields must be filled out") 'actions To Do If True
End If
Next
End Sub

问题是每次用户输入信息时行数都会不同,一旦完成,他们会将其余行留空。我不太清楚如何继续,因为我对VBA和编码很新。我希望某种类型的循环可以检查这些必填字段并在遇到空行时停止,这样就可以解决问题了,但是我真的不太了解编码。

我发现VBA删除了空行,如下所示,并希望在验证完成后运行。

不幸的是,代码示例工具没有合作,所以我已经包含了一个Image。 Code sample

不确定是否有任何理由,如果您需要澄清,请告诉我。非常感谢任何和所有的帮助!

1 个答案:

答案 0 :(得分:2)

好的,试一试。当你找到一个无效的行时,我不确定你想要发生什么 - 这只是显示一个消息框。

Sub x()

Dim rFind As Range, r1 As Range, r As Long

With Sheet1
    Set rFind = .Cells.Find(What:="*", After:=.Cells(1), LookAt:=xlWhole, _
                            SearchOrder:=xlByRows, SearchDirection:=xlPrevious, SearchFormat:=False)

    If Not rFind Is Nothing Then
        For r = 2 To rFind.Row
            Set r1 = Union(Cells(r, "A"), Cells(r, "D"), Cells(r, "G"), Cells(r, "H"), Cells(r, "I"))
            If WorksheetFunction.Count(r1) > 0 And WorksheetFunction.CountA(r1) < r1.Count Then
                MsgBox r & " incomplete"
            End If
        Next r
    End If
End With

End Sub