如果Cell为空,请复制上面的单元格

时间:2016-07-28 15:37:31

标签: excel vba excel-vba

Sub MacroFillAreas()

    For Each area In Columns("B:C").SpecialCells(xlCellTypeBlanks)
        If area.Cells.Row <= ActiveSheet.UsedRange.Rows.Count Then
            area.Cells = Range(area.Address).Offset(-1, 0).Value
        End If
    Next area
End Sub

这是我在工作簿中填充空白单元格的宏。我在area.Cells = Range(area.Address).Offset(-1, 0).Value

上抛出一个对象错误

任何人都能解释为什么会这样吗?以下是数据的快速示例以及我正在尝试使用它的内容。

A  1  12
A  1  12
A  
A  
A  2  14
A  
A  3  14
A
A

必须复制上面的单元格:

A  1  12 
A  1  12
A  1  12
A  1  12
A  2  14
A  2  14
A  3  14
A  3  14
A  3  14

1 个答案:

答案 0 :(得分:1)

BruceWayneis,当B1:C1为空时,你会得到错误。

  • 非连续单元格的范围对象具有多个区域。因此,您应该将区域重命名为单元格以进行说明。
  • area.Cells误导区域只是1个小区使用区域
  • area是这个Range(area.Address).Offset(-1, 0).Value使用区域不需要的范围.Offset(-1,0).Value而不是
  • 如果找不到单元格,SpecialCells将抛出错误。您需要捕获此错误。
Sub MacroFillAreas()

    Dim cell As Range, SearchRange As Range

    On Error Resume Next
    Set SearchRange = Columns("B:C").SpecialCells(xlCellTypeBlanks)
    On Error GoTo 0

    If Not SearchRange Is Nothing Then
        For Each cell In SearchRange

            If cell.Row > 1 Then cell = cell.Offset(-1, 0).Value

        Next cell
    End If

End Sub