我正在尝试复制最后一行并在下一行粘贴特殊内容。当我为单个工作表尝试以下代码时,它可以正常工作:
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
提前致谢!
答案 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