当列为空时,相交语句失败

时间:2014-10-08 16:09:35

标签: vba excel-vba excel

我遇到了打开文件并重新格式化内容的宏的部分问题。部分代码(下面)使用" For Each ___ in Intersect"重新格式化列,但如果列为空,则宏崩溃。

For Each Cel In Intersect(NewWs.Range("i3:i65536"), NewWs.UsedRange).Cells
    If Cel = "" Then
    Cel.Value = "-"
    End If

防止崩溃的最直接方法是什么?如果列为空,只需继续前进?如果需要更多信息,请告诉我。提前感谢您的任何帮助。

2 个答案:

答案 0 :(得分:0)

考虑:

Dim r As Range
Set r = Intersect(NewWs.Range("i3:i65536"), NewWs.UsedRange)
If Not r Is Nothing Then
    For Each Cel In r.Cells
        If Cel = "" Then
            Cel.Value = "-"
        End If
    Next Cel
End If

答案 1 :(得分:0)

我猜你不是那么关心公式返回的零长度字符串,就像你真正空白的单元格一样。如果是这种情况,您可以通过使用.SpecialCells(xlCellTypeBlanks)标识空白单元格来避免循环并使用连字符回填空白单元格。

Dim mt As Range
Set mt = Intersect(NewWs.Range("i3:i65536"), NewWs.UsedRange).SpecialCells(xlCellTypeBlanks)
If Not mt Is Nothing Then _
    mt = Chr(45) 'hyphen character

这比循环通过细胞并测试每个细胞缺乏价值要快得多。奖励是如果没有空白单元格,则整个操作都被确定,您可以继续进行下一个操作。但是,如果公式返回零长度字符串(例如""),那么这不会识别它们,因为它们不是真正的空白单元格。当然,公式可能首先返回连字符。