我的代码如下。我将Rng
设置为循环宏中的范围,这是其中的一个范围。如果满足某个条件,则调用以下子:
Sub FKCutandPaste(Rng As Range)
Rng.Resize(, 9).Cut
Rng.Offset(, 19).Insert Shift:=xlDown
Rng.Resize(, 9).Delete Shift:=xlUp
我希望这可以删除一部分数据,然后将其粘贴到活动列之外。但是,宏似乎只是删除了所需的单元格,但没有移动到第二行。
我在这里错过了一些非常小的东西吗?
答案 0 :(得分: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
我添加了'select'位,因为这通常有助于测试 - 在选择中放置一个中断,运行到它,然后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
将'cut'更改为'copy'并且行为会发生变化。您可能只想这样做 - 将其更改为复制 - 无论如何都要删除原始单元格。