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

我得到了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 

当您使用.SpecialCells ,您必须小心。 它没有find匹配,你会得到一个错误。

试试像这样( 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 。 您可能想要了解如何避免在Excel VBA中使用select

你不应该担心是否有空单元格。 如果您正在尝试复制UsedRange ,则可以这样做:

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

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

此外,我认为你可能有你的if语句倒退我认为你的条件应该是:

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

如果它find空白单元格然后设置它们的值。