我得到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
答案 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
如果找到空白单元格,则设置其值。