For Loop在工作表中粘贴特殊行的问题

时间:2014-11-25 16:31:38

标签: excel vba excel-vba for-loop

我正在尝试复制最后一行并在下一行粘贴特殊内容。当我为单个工作表尝试以下代码时,它可以正常工作:

Sub Macro1()

Dim LR  As Long
    LR = Range("E" & Rows.Count).End(xlUp).Row

    Rows(LR).Select
    Selection.Copy
    Rows(LR + 1).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

End Sub

但是当我试图遍历所有工作表时,它只是在其中一个工作表中粘贴相同的复制行次数而不是重复到每个工作表。你能告诉我在下面的循环中我做错了什么吗?

 Sub Macro1()
 Dim ws As Worksheet
 Dim wb As Workbook
 Dim LR  As Long
 Set wb = ActiveWorkbook

 For Each ws In wb.Worksheets

    If ws3.Name Like "*.plt" Then

    LR = Range("E" & Rows.Count).End(xlUp).Row
    Rows(LR).Select
    Selection.Copy
    Rows(LR + 1).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

   End If
   Next ws

End Sub

提前致谢!

2 个答案:

答案 0 :(得分:1)

为了节省一些开销,您应该首先避免使用.Select.Selection.*。如果您仍然想要复制该值,则应通过单元格的.Value属性进行复制。其次,您应该使用With语句来确保您引用目标表。最后,您应该将未使用的对象最终设置为Nothing。以下代码应该可以解决问题。

<强>代码

Sub Macro1()
    Dim ws As Worksheet
    Dim wb As Workbook
    Dim rng As Range
    Set wb = ActiveWorkbook
    For Each ws In wb.Worksheets
        With ws
            If .Name Like "*.plt" Then
                Set rng = .Range("E" & Rows.Count).End(xlUp).EntireRow
                rng.Offset(1).Value = rng.Value
            End If
        End With
    Next ws
    Set ws = Nothing
    Set rng = Nothing
    Set wb = Nothing
End Sub

答案 1 :(得分:0)

我认为这个

If ws3.Name Like "*.plt" Then

可能是你的问题。您需要启用Option Explicit,以便不使用未定义的名称。

另外,制作

Set wb = ActiveWorkbook

Set wb = ThisWorkbook