问题与循环粘贴跨工作表的特殊行

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

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 

但是当我试图循环遍历所有的工作表时,它只是粘贴在工作表中相同的复制行次数而不是重复到每个工作表的特殊行为。 你可以请告知我在做什么错在以下for循环?

  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 

提前致谢!

为了节省一些开销,你应该首先避免使用.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 

我认为这一点

 If ws3.Name Like "*.plt" Then 

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

另外,使

 Set wb = ActiveWorkbook 

 Set wb = ThisWorkbook