2016-06-21 10 views
3

Я не могу скопировать данные из одной книги в другую. Но с той же книгой работает. После запуска макрокоманды рабочий лист назначения пуст. У меня есть 2 кода. Оба не работают. Мой исходный файл: . Формат файла и .xlsx: .xlsm. Есть ли ошибки?Лист Excel: копирование данных из одной книги в другую книгу

Code1:

Sub mycode() 

Workbooks.Open Filename:="source_file" 
Worksheets("Sheet1").Cells.Select 
Selection.Copy 


Workbooks.Open Filename:="destination_file" 
Worksheets("Sheet1").Cells.Select 
Selection.PasteSpecial 
ActiveWorkbook.Save 


End Sub 

Код 2

Sub foo2() 
Dim x As Workbook 
Dim y As Workbook 

Set x = Workbooks.Open("source file") 
Set y = Workbooks.Open("destination file") 

y.Sheets("Sheet1").Range("A1").Value = x.Sheets("Sheet1").Range("A1") 

x.Close 

End Sub 

ответ

1

Я предполагаю, что вы пишете ниже code1 и Кодекса2 превосходят макросы в отдельном файле, скажем copy_paste.xlsm:

Код 1 работает, когда вы предоставляете полный путь к файлам Workbooks.open:

Sub mycode() 

Workbooks.Open Filename:="C:\Users\xyz\Documents\Excel-Problem\source_file.xlsx" 
Worksheets("Sheet1").Cells.Select 
Selection.Copy 

Workbooks.Open Filename:="C:\Users\xyz\Documents\Excel-Problem\destination_file.xlsm" 
Worksheets("Sheet1").Cells.Select 
Selection.PasteSpecial xlPasteValues    'xlPasteAll to paste everything 
ActiveWorkbook.Save 

ActiveWorkbook.Close SaveChanges:=True    'to close the file 
Workbooks("source_file").Close SaveChanges:=False 'to close the file 

End Sub 

Чтобы вставить все (формулы + значение + форматы), используйте тип пасты, как xlPasteAll.

Code 2 работает тоже, все, что вам нужно, чтобы обеспечить полный путь и вам не хватает _ в именах файлов:

Sub foo2() 
Dim x As Workbook 
Dim y As Workbook 

Set x = Workbooks.Open("C:\Users\xyz\Documents\Excel-Problem\source_file.xlsx") 
Set y = Workbooks.Open("C:\Users\xyz\Documents\Excel-Problem\destination_file.xlsm") 

'it copies only Range("A1") i.e. single cell 
y.Sheets("Sheet1").Range("A1").Value = x.Sheets("Sheet1").Range("A1") 

x.Close SaveChanges:=False 
y.Close SaveChanges:=True 

End Sub 
+0

Спасибо. Я дал полный путь, для ссылки я упомянул исходный файл. Я попробовал ваш код, но он не работает. Во время отладки после открытия второго файла отладчик не попадает в следующую строку, а останавливает сам отладку – Star

+0

Whar - сообщение об ошибке? –

+0

И второй файл является файлом с поддержкой макросов, так же есть ли в этом файле макрос, который запускается при его ручном открытии? –

1

отредактировал добавить (минимум) файл проверить

вы должны указать полный путь к файлу, его имя и расширение

больше вы можете открыть только файл назначения, например

Option Explicit 

Sub foo2() 
    Dim y As Workbook 
    Dim sourcePath As String, sourceFile As String, destFullPath As String '<--| not necessary, but useful not to clutter statements 

    sourcePath = "C:\Users\xyz\Documents\Excel-Problem\" '<--| specify your source file path down to the last backslash and with no source file name 
    sourceFile = "source_file.xlsx" '<--| specify your source file name only, with its extension 
    destFullPath = "C:\Users\xyz\Documents\Excel-Problem\destination_file.xlsm" '<--| specify your destination file FULL path 

    If Dir(destFullPath) = "" Then '<--| check is such a file actually exists 
     MsgBox "File " & vbCrLf & vbCrLf & destFullPath & vbCrLf & vbCrLf & "is not there!" & vbCrLf & vbCrLf & vbCrLf & "The macro stops!", vbCritical 
    Else 
     Set y = Workbooks.Open(destFullPath) 

     With y.Sheets("Sheet1").Range("A1") 
      .Formula = "='" & sourcePath & "[" & sourceFile & "]Sheet1'!$A$1" 
      .Value = .Value 
     End With 

     y.Close SaveChanges:=True 
    End If 
End Sub 

вы могли бы даже открыть ни один из них с помощью Excel4macro

+0

Отредактировано для добавления проверки файла. У вас есть какие-либо инструкции «Принудительное возобновление следующего» или 'On Error GoTo'? – user3598756

Смежные вопросы