Excel VBA:消息框在最后显示错误列表

我是VBA的新手,我非常感谢你的帮助。 search栏下面的代码为A栏中的空格,突出显示它们,然后每当单元格的单元格位置出现空白时显示一条消息(例如“$ A $ 1无值”)。 我将这些单元格位置复制到另一个名为“Results”的选项卡中。

我需要帮助以下。 我想以某种方式让消息显示一次单元格的列表和他们的位置。 我不想每次发现一个空白单元格时popup消息(我可能有一个文件中有数百个空单元格,并且为每个单元格单击确定不实际)。 然后,这个值列表将被复制到我的“结果”表中。

这是我现在的代码:

Sub CeldasinInfo() Dim i As Long, r As Range, coltoSearch As String coltoSearch = "A" For i = 1 To Range(coltoSearch & Rows.Count).End(xlUp).Row Set r = Range(coltoSearch & i) If Len(r.Value) = 0 Then r.Interior.ColorIndex = 3 ' Red r.Select MsgBox "No Value, in " & r.Address Sheets("Results").Range("A" & Sheets("Results").Range("A" & Rows.Count).End(xlUp).Row).Offset(1, 0).Formula = r.Address End If Next End Sub 

提前感谢。 我真的很感激你的帮助。

像这样的东西应该为你工作:

 Sub CeldasinInfo() Dim i As Long, r As Range, coltoSearch As String Dim Result as String Dim ErrCount as integer ErrCount = 0 coltoSearch = "A" coltoSearch = Range("1:1").find(What:="Hours", LookIn:=xlValues, LookAt:=xlWhole).Column Result = "No Value in:" & vbcrlf For i = 1 To Range(coltoSearch & Rows.Count).End(xlUp).Row Set r = Range(coltoSearch & i) If Len(r.Value) = 0 Then r.Interior.ColorIndex = 3 ' Red r.Select ' MsgBox "No Value, in " & r.Address Result = Result & r.Address & vbcrlf ErrCount = ErrCount + 1 if ErrCount Mod 10 = 0 then 'change to 15 or 20 or whatever works well MsgBox Result Result = "No Value in:" & vbcrlf End If Sheets("Results").Range("A" & Sheets("Results").Range("A" & Rows.Count).End(xlUp).Row).Offset(1, 0).Formula = r.Address End If Next If ErrCount > 0 then MsgBox "There were " & ErrCount & " errors detected." & vbcrlf & result else MsgBox "No errors detected" End If End Sub 

这将给你在MsgBox单独的行上的每个地址。 如果有几百个错误可能,这将导致一个非常长的MsgBox输出,我不知道它将如何处理。 您可能需要添加一个计数器,并显示消息每10,15或20个错误,以获得更好的输出。

如果你的单元格是真正的空白,你可以避免一个范围循环,并使用SpecialCells

 Sub CeldasinInfo() Dim rng1 As Range Dim coltoSearch As String coltoSearch = "A" On Error Resume Next Set rng1 = Columns(coltoSearch).SpecialCells(xlCellTypeBlanks) On Error GoTo 0 If rng1 Is Nothing Then Exit Sub rng1.Interior.ColorIndex = 3 ' Red MsgBox "No Value, in " & rng1.Address End Sub