Vba 使用For循环在工作表上粘贴特殊行
我正试图复制最后一行,并在下一行粘贴特殊。当我为单个工作表尝试以下代码时,效果很好:Vba 使用For循环在工作表上粘贴特殊行,vba,excel,for-loop,Vba,Excel,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:=xl
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
提前谢谢 我认为
If ws3.Name Like "*.plt" Then
可能是你的问题。您需要启用OptionExplicit,以便不使用未定义的名称
还有,制作
Set wb = ActiveWorkbook
到
要节省一些开销,首先应避免使用
。选择和。选择。*
。如果您想只复制值,则应通过单元格的.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
这太棒了!非常好,非常感谢您详细解释!谢谢你的回复。我已经试过了,但是仍然有一些东西是写出来的,但是来自“THOTHAL”的另一个答案非常有效,我也学到了一种新的方法。但真的很感谢你帮助我:)
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