1

我的代码如下。我Rng在循环宏中设置了一个范围,这是它的一个子集。如果满足某个条件,则调用以下 sub:

Sub FKCutandPaste(Rng As Range)

Rng.Resize(, 9).Cut
Rng.Offset(, 19).Insert Shift:=xlDown
Rng.Resize(, 9).Delete Shift:=xlUp

我希望这可以删除一部分数据,然后将其粘贴到活动列之外。但是,宏似乎只是剪掉了所需的单元格,但没有移动到第二行。

我在这里错过了一些非常小的东西吗?

4

1 回答 1

2

如果您有任何具体问题,我无法告诉您。这段代码对我来说很好,在 Excel 2010 中使用带有数据的任意表格(并作为其自己的子表格):

Sub test()
Dim rng As Range
Set rng = Cells(6, 2)
rng.Resize(, 9).Cut
rng.Offset(, 19).Select
Selection.Insert Shift:=xlDown
rng.Resize(, 9).Delete Shift:=xlUp
End Sub

我添加了“选择”位,因为这通常对测试很有帮助——在选择上放一个中断,运行到它,然后 F8 行;然后看看选择了什么。如果它在那里出错,那么 rng.offset(,19) 有问题。如果它成功并选择了(某些东西),那么您可以看到它认为应该在哪里插入数据。

编辑:注释掉 rng.Resize(,9).Delete 似乎可以解决问题 - 它正在删除新插入的单元格。当您使用 rng.cut,然后将单元格粘贴进去时,这似乎改变了 rng 的当前位置。看到这个:

Sub test()
Dim rng As Range
Set rng = Cells(6, 2)
MsgBox (rng.Address)
rng.Resize(, 9).Cut
MsgBox (rng.Address)
rng.Offset(, 19).Insert Shift:=xlDown
MsgBox (rng.Address)
rng.Resize(, 9).Delete Shift:=xlUp
End Sub

将“剪切”更改为“复制”,行为就会发生变化。您可能只想这样做 - 将其更改为复制 - 因为无论如何您都删除了原始单元格。

于 2013-02-19T16:14:50.617 回答