Ответ 1
Это должно сделать это, дайте мне знать, если у вас есть проблемы с этим:
Sub foo()
Dim x As Workbook
Dim y As Workbook
'## Open both workbooks first:
Set x = Workbooks.Open(" path to copying book ")
Set y = Workbooks.Open(" path to destination book ")
'Now, copy what you want from x:
x.Sheets("name of copying sheet").Range("A1").Copy
'Now, paste to y worksheet:
y.Sheets("sheetname").Range("A1").PasteSpecial
'Close x:
x.Close
End Sub
В качестве альтернативы вы можете просто:
Sub foo2()
Dim x As Workbook
Dim y As Workbook
'## Open both workbooks first:
Set x = Workbooks.Open(" path to copying book ")
Set y = Workbooks.Open(" path to destination book ")
'Now, transfer values from x to y:
y.Sheets("sheetname").Range("A1").Value = x.Sheets("name of copying sheet").Range("A1")
'Close x:
x.Close
End Sub
Чтобы распространить это на весь лист:
With x.Sheets("name of copying sheet").UsedRange
'Now, paste to y worksheet:
y.Sheets("sheet name").Range("A1").Resize( _
.Rows.Count, .Columns.Count) = .Value
End With
И еще один способ, сохранить значение как переменную и записать переменную в место назначения:
Sub foo3()
Dim x As Workbook
Dim y As Workbook
Dim vals as Variant
'## Open both workbooks first:
Set x = Workbooks.Open(" path to copying book ")
Set y = Workbooks.Open(" path to destination book ")
'Store the value in a variable:
vals = x.Sheets("name of sheet").Range("A1").Value
'Use the variable to assign a value to the other file/sheet:
y.Sheets("sheetname").Range("A1").Value = vals
'Close x:
x.Close
End Sub
Последний метод, описанный выше, обычно самый быстрый для большинства приложений, но обратите внимание, что для очень больших наборов данных (100 тыс. Строк) он заметил, что буфер обмена фактически превосходит дамп массива:
Copy/PasteSpecial против Range.Value = Range.Value
Тем не менее, существуют и другие соображения, помимо скорости, и может случиться так, что снижение производительности большого набора данных стоит компромисса, чтобы избежать взаимодействия с буфером обмена.