EntireRow.Delete似乎删除了错误的行

Yow*_*E3K 9 excel vba excel-vba

我有以下代码:

Sub test()
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    Dim r As Long
    Dim rng As Range

    Set ws1 = Worksheets("Sheet1")
    Set ws2 = Worksheets("Sheet2")

    'Set some dummy data
    For r = 1 To 20
        ws1.Cells(r, "A").Value = r + 100
        ws2.Cells(r, "A").Value = r + 200
    Next

    'Set a reference to Sheet1!A11
    Set rng = ws1.Range("A11")

    'Copy Sheet1 row 11 to Sheet2 row 5
    rng.EntireRow.Cut ws2.Range("A5")

    'Delete Sheet1 row 11
    rng.EntireRow.Delete

End Sub
Run Code Online (Sandbox Code Playgroud)

我为"Sheet1"的第11行中的单元格分配了引用.使用该引用,我Cut将行放到"Sheet2"上的某个位置,然后我使用该引用从"Sheet1"中删除整行.

我的期望是"Sheet1"的第11行将被删除,在第1行到第10行的第A列101到110中保留值,在第11到19行中保留112到120的值.

发生的事情是第11行被清除(由于Cut),第5行被删除.

代码执行后的图纸图像: 代码运行后的表单图像

删除第5行的事实似乎与第5行是Cut语句"Sheet2"上的目标行有关.如果它删除了"Sheet2"上的第5行,我可以理解发生了什么 - 即引用被重新命名为另一个工作表的一部分Cut- 但它删除了"Sheet1"上的第5行.

任何人都能解释这种奇怪的行为吗?

注意:这个问题的灵感来自我试图写这个答案,我对OP的那个问题的许多评论告诉他们"当然EntireRow.Delete会删除你的行 - 你为什么告诉我它不起作用".

小智 0

试试我的代码:

Sub test()
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    Dim r As Long
    Dim rng As Range

    Set ws1 = Worksheets("Sheet1")
    Set ws2 = Worksheets("Sheet2")

    'Set some dummy data
    For r = 1 To 20
        ws1.Cells(r, "A").Value = r + 100
        ws2.Cells(r, "A").Value = r + 200
    Next

    'Set a reference to Sheet1!A11
    Set rng = ws1.Range("A11")

    'Copy Sheet1 row 11 to Sheet2 row 5
    rng.EntireRow.Cut ws2.Range("A5")

    'Delete Sheet1 row 11
    Range("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete


End Sub
Run Code Online (Sandbox Code Playgroud)