我有两个工作簿,具有相同的工作表名称(但顺序不同),我想复制一个工作簿的所有工作表的信息,并将该信息粘贴到另一个工作簿的相应工作表中(匹配工作表名称)。我觉得这段代码正在进行中,但也许有更高效或更清晰的方法来实现这一目标。代码正在运行,但它会发出警告,例如" Windows剪贴板中有大量数据......等等......"
let edges = [
("a", "b"); ("a", "c");
("a", "d"); ("b", "e");
("c", "f"); ("d", "e");
("e", "f"); ("e", "g")
];;
答案 0 :(得分:1)
我不确定您要复制多少数据,或者要复制到目标工作簿中的位置,但您发布的代码只复制一个单元格(A3)并将其复制到单元格A100中的目标工作簿中。我收集你的代码只是一个例子,因为肯定不会复制单个单元格的警告。这将有助于获得您的实际范围和确切的警告信息,但正如您所说,它正在发挥作用。您是在运行代码时,还是退出工作簿时收到消息?如果是后者(我怀疑),那么您只需清除代码末尾的剪贴板:
Application.CutCopyMode = False
您还可以通过一些小技巧消除第二个循环:
Set sh = Nothing
On Error Resume Next
Set sh = y.Worksheets(aw.Worksheets(i).Name)
On Error GoTo 0
If TypeName(sh) <> "Nothing" Then
....
End If
我的整个子程序如下所示:
Sub CopyWorkbook()
Dim aw As Workbook
Dim y As Workbook
Dim sh As Worksheet
Set aw = Application.ActiveWorkbook
Set y = Application.Workbooks.Open("C:\work\fusion\expenseTypes.xls.xlsx")
For i = 1 To aw.Sheets.Count
Set sh = Nothing
On Error Resume Next
Set sh = y.Worksheets(aw.Worksheets(i).Name)
On Error GoTo 0
If TypeName(sh) <> "Nothing" Then
sh.Range("A:C").Copy aw.Worksheets(i).Range("A1")
End If
Next i
Application.CutCopyMode = False
End Sub
我认为这是最有效的方法。我上面的示例代码复制了整个列(A到C),这保留了列格式,因此无需为列宽重新调整新工作簿。