如果在范围内有非空白单元格,如何运行代码?
我得到了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空白单元格然后设置它们的值。