Копирование листа активной книги в закрытую книгу макросом, Копирование листа или диапазона активной книги в закрытую книгу при условии отсутствия этого листа в ней
Собственно, тема похожая есть, но там посоветовали создать отдельную ибо есть своя специфика. Есть файл-шаблон в котором есть заготовки листов (диапазонов) для внесения данных. На главном листе формируется идентификатор (будущее имя новой книги). При запуске макроса, на сервере в локалке создаётся файл xls с именем идентификатора, в который копируется часть информации с главного листа файла-шаблона. Перед созданием необходимо убедится в отсутствии такого файла, а если он есть, действие по созданию заменяется на открытие уже существующего файла. Вот эти действия я кое-как осуществил. Но теперь мне нужно, чтобы в этот файл из файла-шаблона можно было бы "догружать" либо листы либо диапазоны с листов, и, причём также с проверкой их существования. Если такой лист уже есть в этом файле, то макрос должен открыть лист без его замены. Если листа нет, то создать его или скопировать целиком из файла-шаблона. Аналогичные действия необходимо сделать с диапазонами на листах файла-шаблона, которые копируются в одноимённые листы. То есть, алгоритм примерно такой: проверить существует ли лист, если да - открыть, если нет, скопировать. Если лист на который нужно скопировать только диапазон есть, то открыть этот лист, если нет, создать лист с аналогичным именем, и скопировать диапазон. Книга в которую заносится информация затем сохраняется. Внизу код проверки существования файла и создание из диапазона файла с заданным в ячейке именем и префиксом, если проверка показала что такого файла нет. Подскажите пожалуйста, можно ли этот код видоизменить и где, чтобы он работал для листов.
Код
Sub SearhFiles() 'Макрос поиска файла с именем и автоматическое его открытие при наличии
On Error GoTo err_: Workbooks.Open "\\Server\FTP\Global\" & Range("F2") & ".xls": Exit Sub
err_: MsgBox "Нет такого файла!"
Application.Run "DOC-Fish.xlsm!R_to_xls" 'Запуск макроса по созданию файла с именем
End Sub
Sub R_to_xls()
Const Path = "\\Server\FTP\Global\" 'Объявляем путь для сохранен
Dim NameDate As String 'Вводим переменную для определения даты для имени файла
Dim RepFileName As String 'Вводим переменную для имени файла
NameDate = Format((Sheets("Расход").Range("Y1")), "yyyy-mm-dd") 'Указываем значение переменной даты для имени файла (хотя дата не создаётся почему-то в имени)
RepFileName = "R-" & NameDate & ".xls" 'Указываем значение переменной всего имени файла
Sheets("Расход").Select
Range("O2:AB41").Select
Range("O2:AB41").Activate
Selection.Copy
Workbooks.Add
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Sheets("Лист1").Select
Sheets("Лист1").Name = "R-" & NameDate
ActiveWindow.Zoom = 100
ActiveWorkbook.SaveAs FileName:=Path & RepFileName, FileFormat _
:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:= _
False, CreateBackup:=False
End Sub
Пробовал следующий код, но эксель ругается на 4 строку и не могу понять как макросом проверить наличие листа в файле, по аналогии с указанным выше кодом
Код
Sub CopySheet()
Dim Ws As Worksheet
Set Ws = ActiveSheet
With Workbooks("\\Server\ftp\Global\" & Range("Q3") & ".xls")
Err.Clear
On Error Resume Next
.Worksheets.Add After:=.Worksheets(Sheets.Count)
If Err.Number = 0 Then ActiveSheet.Name = Ws.Name
Ws.Parent.Activate
Cells.Copy Destination:=.Worksheets(ActiveSheet.Name).Cells
End With
End Sub