我正在尝试设置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
是否需要将副本包含在宏中,还需要包含在循环中?每次将我粘贴到循环中的新工作簿中时,是否都必须回到源工作簿并重新复制范围?任何帮助将不胜感激。
谢谢。
答案 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