excel vba:范围xldown始终复制至少3行

时间:2014-07-14 19:46:50

标签: excel vba

我对xldown有一些疯狂的问题。

我希望它复制一个变化的范围(可能有0个条目,1个条目或10个条目。所以我用Find和RngA.offset(1,4)引用起始位置,我想要范围去直到它找到一个空单元格。如果有至少3行数据(例如,如果有4行然后是空白,它将仅复制4),这似乎有效,但如果有3或更少,则复制全部3(例如,如果第1行和第3行中有数据,但第2行没有数据,则应仅复制第1行,因为第2行为空。但是它复制1-3,第2行中有空白。)我希望这是有道理的。有人可以帮忙吗?

    Sub SubmitData()
    Dim RngA As Range
     With Sheets("Review").Range("A:A")
        Set RngA = .Find(what:="TOR Design Checklist", lookat:=xlWhole)
        Range(RngA.Offset(1, 4), RngA.Offset(1, 4).End(xlDown)).Copy _
            Destination:=Sheets("Field_Phase 1").Range("H7")
     End With
    End Sub

1 个答案:

答案 0 :(得分:1)

这很正常。按照您的例子,“select”已经在调用xldown之前的最后一行。

只需在其前面添加if语句即可处理此独特案例。

if {Range under your selected range} = "" then
    ' Only copy the 1 range
else
    ' Do as usual
End if

编辑1

适合您的问题:

我认为它应该有效。评论,如果没有。

Sub SubmitData()
Dim RngA As Range
With Sheets("Review").Range("A:A")
    Set RngA = .Find(what:="TOR Design Checklist", lookat:=xlWhole)
    If RngA.offset(2,4).value = "" then
        ' Only copy the 1 range
        Range(RngA.Offset(1, 4),RngA.Offset(1, 4)).Copy _
            Destination:=Sheets("Field_Phase 1").Range("H7")
    else
        ' Do as usual
        Range(RngA.Offset(1, 4), RngA.Offset(1, 4).End(xlDown)).Copy _
            Destination:=Sheets("Field_Phase 1").Range("H7")
    End if
End With
End Sub