Страницы: 1
RSS
Копирование листа активной книги в закрытую книгу макросом, Копирование листа или диапазона активной книги в закрытую книгу при условии отсутствия этого листа в ней
 
Добрый день!

Собственно, тема похожая есть, но там посоветовали создать отдельную ибо есть своя специфика.
Есть файл-шаблон в котором есть заготовки листов (диапазонов) для внесения данных. На главном листе формируется идентификатор (будущее имя новой книги).
При запуске макроса, на сервере в локалке создаётся файл 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
Изменено: Sandero - 20.06.2019 17:35:39
Страницы: 1
Наверх