Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 使用For循环在工作表上粘贴特殊行_Vba_Excel_For Loop - Fatal编程技术网

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