如果在范围内有非空白单元格,如何运行代码?

时间:2017-11-29 13:13:06

标签: excel excel-vba excel-formula vba

我得到A1:D17范围。如果在我的范围内有空白单元格,我的代码可以正常工作,反之亦然,它不起作用

请帮助找出问题。

我写了这段代码:

Sub Example
    Workbooks("Training_VBA Codes").Activate
    Worksheets("Practice 4").Activate
    Range("A1").Select

    If ActiveCell.CurrentRegion.SpecialCells(xlCellTypeBlanks) = False Then

        ActiveCell.CurrentRegion.SpecialCells(xlCellTypeBlanks).Value = 0
        Range(ActiveCell, ActiveCell.End(xlDown).End(xlToRight)).Copy

    Else

        Range(ActiveCell, ActiveCell.End(xlDown).End(xlToRight)).Copy

    End If
End Sub

2 个答案:

答案 0 :(得分:1)

当您使用.SpecialCells时,您必须小心。没有匹配发现你会收到错误。

尝试这样( UNTESTED

Sub Sample()
    Dim rng As Range

    On Error Resume Next
    Set rng = Range("A1").CurrentRegion.SpecialCells(xlCellTypeBlanks)
    On Error GoTo 0

    If Not rng Is Nothing Then '<~~ Check if there were blank cells found
        rng.Value = 0
        '
        '~~> Rest of the code
        '        
    End If
End Sub

提示:同时避免使用.Activate/.Select。您可能希望看到How to avoid using Select in Excel VBA

答案 1 :(得分:1)

您不必担心是否有空单元格。如果您要复制UsedRange,可以执行以下简单操作:

AtiveSheet.Range("$A$1:" & ActiveSheet.UsedRange.Address).copy

这将复制活动工作表中的每个单元格,无论它是否为空UsedRange,这意味着如果您只在d20填充了一个单元格,它将复制A1:D20中的所有内容。

另外我认为你的if语句可能会倒退我认为你的if条件应该是:

If ActiveCell.CurrentRegion.SpecialCells(xlCellTypeBlanks) = True Then

如果找到空白单元格,则设置其值。