Добрый день! Подскажите, пожалуйста. Есть макрос, который в процессе работы открывает два закрытых файла, находящихся в одной папке с рабочей книгой (в примере "Файл с макросом"), и необходимо из одного открытого файла (В примере "Книга 3") переместить два листа в другой открытый фал (в примере "Книга 2). Сейчас макрос перемещает листы в рабочий файл - в "Файл с макросом". Название файла, в который необходимо переместить листы указать не могу, т.к. каждый месяц оно разное, название файла из которого нужно перемещать одно и тоже.
Добрый день! В начале кода нужно задать 2 константы: имя книги источника и перечень листов для копирования
Код
Sub Макрос_1()
' Задать имя книги источника
Const SrcFileName = "книга1.xlsx"
' Задать перечень листов для копирования
Const SheetNames = "Лист3,Лист4"
Dim p As String
Dim WbSrc As Workbook, WbDest As Workbook
' Путь этой книги с маросами
p = ThisWorkbook.Path & "\"
' Отключить обновление экрана
Application.ScreenUpdating = False
' Перехватывать ошибки
On Error GoTo exit_
' Открыть файл назначения
With Application.FileDialog(msoFileDialogFilePicker)
.InitialFileName = p
.AllowMultiSelect = False
.Title = "Выберите файл, в который будут скопированы листы"
.Filters.Clear
.Filters.Add "Файл назначения", "*.xlsx"
If .Show = False Then Exit Sub
If StrComp(.SelectedItems(1), p & SrcFileName, vbTextCompare) = 0 Then
MsgBox "Это книга-источник листов", vbExclamation, "Ошибка выбора"
Exit Sub
End If
Set WbDest = Workbooks.Open(.SelectedItems(1))
End With
' Открыть книгу-источник листов
Set WbSrc = Workbooks.Open(p & SrcFileName, False)
' Скопировать листы
WbSrc.Sheets(Split(SheetNames, ",")).Copy After:=WbDest.Sheets(WbDest.Sheets.Count)
' Закрыть книгу-источник
WbSrc.Close False
' Сохранить книгу назначения
WbDest.Save
' Закрыть книгу назначения
'WbDest.Close
exit_:
' Включить обновление экрана
Application.ScreenUpdating = True
' Сообщить об ошибке, если случилась
If Err Then MsgBox Err.Description, vbCritical, "Ошибка!"
End Sub
Option ExplicitSub Перемещение_листов()
Dim book As Workbook, book1 As Workbook
Dim iPath$
' выбираем файл источник
iPath = Application.GetOpenFilename("(*.xls*),*.xls*", Title:="Выберите файл источник")
' открываем книгу источник
Set book = Workbooks.Open(iPath)
' открываем книгу получатель
Set book1 = Workbooks.Open(ThisWorkbook.Path & "\" & "Книга2.xlsx")
With book
' переносим листы
.Sheets(Array("Лист1", "Лист2")).Copy after:=book1.Sheets(book1.Sheets.Count)
' закрываем книгу источник без сохранения
.Close False
End With
End Sub
Спасибо большое за помощь, но дело в том, что файл в который нужно перенести листы (книга 2) уже открыт и в нем уже кое что макросом проделано, и на определенной стадии нужно открыть файл книга 3 из него перенести листы.
А что это за стадия? Где ее можно увидеть. Если у вас не получается только перенести листы , а в остальном все работает как нужно то код переноса листов следующий.
Хотя, я сомневаюсь что книги связаны между собой, а если не связаны , то и разницы особой нет копировать или перемещать. А с другой стороны, я не с потолка брал копирование, у Татьяны есть макрос на который я и ориентировался, а там именно копирование листов а не перемещение. И тема называется именно "Копирование". Как-то так.