VBA选择和复制忽略第一行

3
我有一段代码需要帮忙。我写的这个脚本是用来将第一行到最后一行的范围复制到另一个工作表的。如果有超过两行包含数据,那么它可以完美地工作,但是如果只有一行(第一行)包含数据,则会忽略该数据,不会复制它,并输出错误。
请问您能否找出可能修复此代码的任何问题?我已经无休止地搜索了很久,但没有结果。谢谢!
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim ws3 As Worksheet

Set ws1 = Worksheets("HCA")
Set ws2 = Worksheets("FormA")
Set ws3 = Worksheets("NamedRange")

ws3.Range("T1:U1").Select
Range(Selection, Selection.End(xlDown)).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("FormA").Select
ws2.Range("AQ7").PasteSpecial

你只需要复制数据的值吗?还是你想要格式/公式等等? - BruceWayne
数据的值。Callum的回答完美地解决了我的问题。 - Wxby
2个回答

4

End(xlDown)在只使用一行时会产生不良影响。相比之下,从工作表底部使用xlUp更加可靠。

Sub test()
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    Dim ws3 As Worksheet

    Set ws1 = Worksheets("HCA")
    Set ws2 = Worksheets("FormA")
    Set ws3 = Worksheets("NamedRange")

    With ws3
        .Range(.Range("T1"), .Cells(.Rows.Count, "U").End(xlUp)).Copy
    End With
    ws2.Range("AQ7").PasteSpecial
End Sub

@Wxby - 如果您只需要值,则可以跳过.Copy,直接执行ws2.Range("AQ7").Value = ws3.Range(ws3.Range("T1"),ws3.Cells(ws3.Rows.Count, "U").End(xlUp).Value - BruceWayne
@BruceWayne,如果复制范围超过一个单元格怎么办?我认为这比那要复杂一些,但我不反对最好重新设计代码使用.Value - CallumDA
@CallumDA 如果复制范围超过一个单元格,您可以将目标范围设置得与其一样大。 - BruceWayne

3
替换内容。
ws3.Range("T1:U1").Select
Range(Selection, Selection.End(xlDown)).Select
Application.CutCopyMode = False
Selection.Copy

... with,

with ws3
    .Range(.cells(1, "T"), .cells(.rows.count, "U").end(xlup)).copy
end with

在寻找最后一个非空单元格时,从底部向上查找,而不是从顶部向下查找。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接