我尝试创建一个宏来验证是否填写了非连续范围,然后在包含值的最后一行之后删除空行。
在上图中,列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。
不确定是否有任何理由,如果您需要澄清,请告诉我。非常感谢任何和所有的帮助!
答案 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