【问题标题】:excel vba: range xldown always copies at least 3 rowsexcel vba:范围 xldown 始终复制至少 3 行
【发布时间】:2014-07-14 19:46:49
【问题描述】:

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

【问题讨论】:

  • 空格是公式的结果吗?还是单元格真的是空白的?
  • 它们确实是空白,我已经检查以确保

标签: excel vba


【解决方案1】:

这是正常的。按照您的示例,在您调用 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

【讨论】:

  • 感谢您的回答,但我不确定我是否理解。我是 vba 新手。
  • 如果范围从 RngA.offset(1,4) 开始,为什么它会自动填充 3 行? - 例如,如果 Rng.offset (2,4) 为空,它应该只复制 (1,4) 对吗?
  • 关于您的第一条评论:这只是一个 if 声明,用于验证第二个单元格 not 为空。这样,它处理异常。关于你的第二条评论:不,因为你有.End(xlDown)。这个命令意味着,至少,它将抓取下面的一个单元格,直到找到另一个空单元格。让我相应地编辑我的答案。
  • @spaindc 查看我的编辑1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-02
相关资源
最近更新 更多