vba - EntireRow.Delete 似乎删除了不正确的行

标签 vba excel

我有以下代码:

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

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

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

发生的事情是第 11 行被清除(由于 Cut )和 第 5 行 正在被删除。

代码执行后的工作表图像:
Image of sheets after code runs

删除第 5 行的事实似乎与第 5 行是 Cut 的“Sheet2”上的目标行有关。陈述。如果它删除了“Sheet2”上的第 5 行,我可以理解发生了什么 - 即该引用作为 Cut 的一部分被重新指向另一张表。 - 但它会删除“Sheet1”上的第 5 行。

谁能解释这种奇怪的行为?

注意:这个问题的灵感来自我尝试写 this answer ,以及我对那个问题的 OP 的许多评论告诉他们“当然 EntireRow.Delete 会删除你的行 - 你为什么告诉我它不起作用”。

最佳答案

使用“复制”而不是“剪切”

rng.EntireRow.Copy ws2.Range("A5")

删除 sheet1 A11 处的行不必为空

这是一个更简单的版本,显示了不良行为

Sub test()

    Dim rng As Range

    Set rng = Sheets("Sheet1").Range("A11")
    rng.Value = "cut and paste me"

    Sheets("Sheet1").Range("A11").Cut Sheets("Sheet2").Range("A5")  ' rng object not used in this line

    rng.Select     ' selects Sheet1 A5  ...  it should be Sheet2 A5

End Sub

它似乎是excel中的一个错误

由于剪切/粘贴有效地移动了剪切范围,因此 excel 将引用移动到新位置

excel将引用移动到正确的单元格,但无法移动到正确的工作表

如果您手动进行剪切/粘贴,引用将正确移动

例如:

如果,sheet1 单元格 A1 包含“=B1”

然后剪切 sheet1 单元格 B1 并将其粘贴到 sheet2 单元格 C3

然后 sheet1 单元格 A1 将包含“=sheet2!C3”

关于vba - EntireRow.Delete 似乎删除了不正确的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44612942/

相关文章:

vba - 删除 Excel 中具有零值的单元格

vba - Excel VBA根据不同单元格中的值填充单元格颜色

excel - 这个excel vba代码Sheet.Range.End().Row的意义是什么?

c# - 在 ASP.NET 中访问 Excel 2013 文件

excel - 需要使用 VBA 从 AutoCAD 将值写入 Excel 工作表

vba - Excel VBA - 使用左函数和查找

excel - 如果单元格 a1=文本,则单元格 a2=粗体。我如何在excel中做到这一点?

excel - 在不打开excel的情况下运行宏

java - 如何为带有 Excel 输入和 System.out.print 输出的 java 项目创建工作 .jar?

python - Excel 使用 Python Pandas 合并 2 个工作表中的单元格