如何使用VBA代码插入一行单元格

时间:2013-02-19 16:05:33

标签: excel excel-vba vba

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

Sub FKCutandPaste(Rng As Range)

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

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

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

1 个答案:

答案 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'并且行为会发生变化。您可能只想这样做 - 将其更改为复制 - 无论如何都要删除原始单元格。