Страницы: 1
RSS
Макрос копирования листов
 
Добрый день!
Подскажите, пожалуйста.
Есть макрос, который в процессе работы открывает два закрытых файла, находящихся в одной папке с рабочей книгой (в примере "Файл с макросом"), и необходимо из одного открытого файла (В примере "Книга 3") переместить два листа в другой открытый фал (в примере "Книга 2). Сейчас макрос перемещает листы в рабочий файл - в "Файл с макросом". Название файла, в который необходимо переместить листы указать не могу, т.к. каждый месяц оно разное,  название файла из которого нужно перемещать одно и тоже.
Изменено: Татьяна - 14.08.2017 06:41:11
 
Добрый день! В начале кода нужно задать 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
Изменено: ZVI - 14.08.2017 08:06:41
 

Код
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

Изменено: Nordheim - 14.08.2017 08:25:49
"Все гениальное просто, а все простое гениально!!!"
 
Спасибо большое за помощь, но дело в том, что файл в который нужно перенести листы (книга 2) уже открыт и в нем уже кое что макросом проделано, и на определенной стадии нужно открыть файл книга 3 из него перенести листы.  
 
Цитата
Татьяна написал:
и на определенной стадии
А что это за стадия? Где ее можно увидеть. Если у вас не получается только перенести листы , а в остальном все работает как нужно то код переноса листов следующий.
Код
Workbooks("Источник").Sheets(Array("Лист1", "Лист2")).Copy after:=Workbooks("Получатель").Sheets(Workbooks("Получатель").Sheets.Count)
"Все гениальное просто, а все простое гениально!!!"
 
Nordheim, это ведь не код переноса! А мне кажется, что Татьяне нужен именно перенос.
 
Цитата
Hugo написал:
Nordheim , это ведь не код переноса! А мне кажется, что Татьяне нужен именно перенос.
можно и перенос написать
Код
Workbooks("Источник").Sheets(Array("Лист1", "Лист2")).Move after:=Workbooks("Получатель").Sheets(Workbooks("Получатель").Sheets.Count)
Хотя, я сомневаюсь что книги связаны между собой, а если не связаны , то и разницы особой нет копировать или перемещать.
А с другой стороны, я не с потолка брал копирование, у Татьяны есть макрос на который я и ориентировался, а там именно копирование листов а не перемещение.
И тема называется именно "Копирование". Как-то  так.
Изменено: Nordheim - 15.08.2017 09:34:40
"Все гениальное просто, а все простое гениально!!!"
 
Код я посмотреть не могу, но в теме всюду с упорством упоминается перемещение :)
Хотя в названии копирование... вот и угадай, впрочем как всегда :)
Страницы: 1
Читают тему
Наверх