2016-08-17 7 views
0

Я хотел бы скопировать лист с формулами в другие книги, поэтому важно иметь общую цель, которую я могу использовать и для других книг, не только для одного. Вот мой код:Как скопировать лист из одной книги в другую в VBA

Sub Macro1() 

    Windows("Filefromcopy.xls").Activate 
    Sheets("needtocopy").Select 
    Sheets("needtocopy").Copy Before:=Workbooks("target.xls").Sheets(1) 
End Sub 

Не могли бы вы дать мне некоторую помощь?

Спасибо!

+0

Какие проблемы \ проблемы вы сталкиваетесь с кодом? – user3598756

ответ

0

Я хотел бы сделать это следующим образом:

Sub Button1_Click() 
    Dim source_worksheet As Worksheet 
    Dim source_workbook As Workbook 
    Dim target_workbook As Workbook 

    Set source_workbook = ActiveWorkbook 
    Set target_workbook = Workbooks.Add() 
    Set source_worksheet = source_workbook.Sheets("needtocopy") 

    source_worksheet.Copy Before:=target_workbook.Sheets(1) 
End Sub 

Этот фрагмент кода немного многословным, но цель состоит в том, чтобы дать вам представление о том, где что-то происходит.

Выбор целевой рабочей книги выполняется в строке Set target_workbook. Здесь вы можете создать новую книгу (например, я делаю это в этом примере) или открыть существующую книгу.

Чтобы открыть существующее место книги, замените набор target_workbook грести с этим:

Set target_workbook = Workbooks.Open("target.xls") 

В конце концов, вы можете добавить некоторые сохранения и закрытия функции, а также:

target_workbook.Save 
target_workbook.Close 

Чтобы получить список файлов в папке, которую необходимо определить для объекта с Dir (как описано в этом сообщении: Loop through files in a folder using VBA?):

Sub Button1_Click() 
Dim source_worksheet As Worksheet 
Dim source_workbook As Workbook 
Dim target_workbook As Workbook 

Set source_workbook = ActiveWorkbook 
Set source_worksheet = source_workbook.Sheets("needtocopy") 

Dim file As Variant 
Dim folder As String 
folder = "C:\test\" 
file = Dir(folder) 
Application.DisplayAlerts = False 
While (file <> "") 
    If InStr(file, "Allocation") <> 0 Then 
     Set target_workbook = Workbooks.Open(folder & file) 
     source_worksheet.Copy Before:=target_workbook.Sheets(1) 
     target_workbook.Save 
     target_workbook.Close 
    End If 
    file = Dir 
Wend 
Application.DisplayAlerts = True 
End Sub 
+0

О, это выглядит хорошо, спасибо! Но на самом деле моя настоящая проблема заключается в том, чтобы иметь общую цель, поэтому я могу использовать ее в каждом файле, который имеет имя «Распределение» в имени файла. Не могли бы вы дать мне некоторые идеи для этого? –

+0

Я попробовал, и это не сработало для меня. У меня нет сообщений или отладок. Когда я открываю целевой файл, я получаю сообщение только в том случае, если я включаю или отключает макросы, и он не копирует лист. Я сохранил как целевой, так и исходный файл на рабочем столе, и я указываю это местоположение для папки, но ничего не происходит. –

+0

Я проверил его снова, и он работает для меня. Вы изменили настройку пути в переменной папки? Кроме того, попробуйте прокомментировать Application.DisplayAlerts = False, чтобы просмотреть сообщения об ошибках. – Gabor

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