使用循环将复制的数据范围粘贴到所有打开的工作簿中

时间:2018-12-12 16:36:36

标签: excel vba loops

我正在尝试设置VBA宏以循环浏览所有打开的文件,并将相同范围的单元格粘贴到循环中的每个工作簿上。我基本上可以使用下面的简单宏(LoopEachOpenWorkbook)来完成此过程的相反操作:我将从每个打开的工作簿中复制一个范围并将其粘贴到中央工作簿中,以便可以汇总所有数据。

 Sub LoopEachOpenWorkbook()

Dim wb As Workbook

 For Each wb In Workbooks

      If wb.Name <> "FILE NAME.xlsm" Then

              wb.Activate

              ActiveWindow.WindowState = xlNormal

              Sheets("Sheet1").Select

              Range("A2:S20").Select

              Selection.Copy

              Windows("FILE NAME.xlsm").Activate

              Range("A1").Select

              Selection.End(xlDown).Select

              ActiveCell.Offset(1).Select

             ActiveSheet.Paste Link:=True

    End If
    Next wb
    End Sub

我认为我将能够使用类似的方法来使用新数据集更新每个工作簿。我尝试使用下面列出的宏(更新矩阵)进行此操作。我的希望是,我可以只复制所需的数据,以便将其放在剪贴板中,而宏将仅粘贴剪贴板中已有的数据。我也尝试过在宏中但在循环之前包含副本。无论我尝试什么,在粘贴的代码行上我仍然会出现错误。我尝试了多种粘贴方法,但仍然出现错误。

Sub Update Matrix()

Dim wb As Workbook





For Each wb In Workbooks

  If wb.Name <> "FILE NAME.xlsm" Then



          wb.Activate

          ActiveWindow.WindowState = xlNormal

          Sheets("Sheet 1").Select

          ActiveSheet.Unprotect "password"

          Range("A5").Select

          Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

        :=False, Transpose:=False

          ActiveSheet.Protect "password", True, True

          Sheets("Sheet 2").Select



  End If

Next wb

是否需要将副本包含在宏中,还需要包含在循环中?每次将我粘贴到循环中的新工作簿中时,是否都必须回到源工作簿并重新复制范围?任何帮助将不胜感激。

谢谢。

1 个答案:

答案 0 :(得分:0)

您无需复制和粘贴,可以直接传输值,但是需要指定来源(除非您的代码访问剪贴板)。

Sub UpdateMatrix()

Dim wb As Workbook

For Each wb In Workbooks
    If wb.Name <> "FILE NAME.xlsm" Then
        With wb.Sheets("Sheet 1")
            .Unprotect "password"
            'in the line below you need to specify the source cell (and sheet)
            .Range("A5").Value = Workbooks("FILE NAME.xlsm").Sheets(1).Range("A1").Value
            .Protect "password", True, True
        End With
    End If
Next wb

End Sub