创建行,然后将原始行复制并粘贴到新行

时间:2017-04-20 18:30:04

标签: excel vba excel-vba loops while-loop

我有一个单元格的行,指定要插入下面的行数。我的代码部分工作得很好。然后,我想获取原始行的内容并粘贴到新创建的行中,然后从这些行中的特定单元格中删除信息。这就是我遇到问题的地方。这是我的代码:

Set ws = ActiveSheet

Dim rw, num As Long

rw = 5

While ws.Cells(rw, 16).Value <> ""
    num = ws.Cells(rw, 16).Value

    If num = 0 Then
        rw = rw + 1
    Else

        Range(Cells(rw + 1, 16), Cells(rw + num, 16)).EntireRow.Insert shift:=xlDown
        Rows(rw).Select
        Selection.Copy
        Range(Rows(rw + 1), Rows(rw + num)).Paste
        Range(Cells(rw + 1, 9), Cells(rw + num, 9)).ClearContents
        rw = rw + num + 1
    End If
Wend

End Sub

我不明白为什么我不能将原始行内容粘贴到我新创建的行中原始行被复制并且在我的ms剪贴板上但不粘贴。我尝试过使用Range()。Paste,Rows()。Paste,Cells()。粘贴和三者的组合,到目前为止没有任何效果。非常感谢任何帮助,谢谢。

2 个答案:

答案 0 :(得分:0)

你可以尝试


    Range(Rows(rw + 1), Rows(rw + num)).PasteSpecial xlPasteValues
    Application.CutCopyMode = False


    Range(Rows(rw + 1), Rows(rw + num)).PasteSpecial Paste:=xlPasteAll, _
            Operation:=xlNone, SkipBlanks:=True, Transpose:=False
        Application.CutCopyMode = False

答案 1 :(得分:0)

我会使用@pascalbaro编写的内容,但也会删除select语句。此外,如果这是您唯一的子例程,您可能希望限制屏幕更新。如果不是将它们添加到调用它们的那个中。

Application.ScreenUpdating = False
Set ws = ActiveSheet
Dim rw, num As Long
rw = 5

While ws.Cells(rw, 16).Value <> ""
    num = ws.Cells(rw, 16).Value

    If num = 0 Then
        rw = rw + 1
    Else

        Range(Cells(rw + 1, 16), Cells(rw + num, 16)).EntireRow.Insert shift:=xlDown

        'remove the selection statements
        Rows(rw).Copy

        Range(Rows(rw + 1), Rows(rw + num)).PasteSpecial Paste:=xlPasteAll, _
            Operation:=xlNone, SkipBlanks:=True, Transpose:=False

        Range(Cells(rw + 1, 9), Cells(rw + num, 9)).ClearContents

        rw = rw + num + 1

    Application.CutCopyMode = False

    End If
Wend

Application.ScreenUpdating = True