Имеется один общий файл компании, в котором сводится вся информация по работе с поставщиками. 1 лист - 1 поставщик Требуется определить имя листа и из этого файла, скопировать с него данные, найти в папке документ содержащий имя листа, открыть его и вставить скопированную информацию с заменой имеющихся данных. Если при поиске файлов, не удается найти документ в котором содержится имя листа, то создать новый файл с определенным именем. Кол-во листов в документе и файлов со временем будет добавляться.
Пример: "Общий документ" - В документе 10 листов (Лист1 , Лист2, Лист3, ... , Лист10) В папке 10 документов (Поставщик Лист1, Поставщик Лист2, ... , Потсавщик Лист10) Надо данные из "Общий документ" с "Лист1" скопировать в документ "Поставщик Лист1", с "Лист2" скопировать в документ "Поставщик Лист2" и тд.
На данный момент есть вот такой макрос, все данные вводятся в ручную:
[vba]
Код
Sub Копируем_листы_в_другую_книгу()
Dim bookconst As Workbook Dim abook As Workbook Application.ScreenUpdating = False 'отключаем обновление экрана для скорости Set abook = ActiveWorkbook 'присваиваем перменную активной книге 'открываем книгу, если не существует, то создаем If Dir("C:\Users\SK\Desktop\Отчеты\Отчет по визитам 1.xlsx") = "" Then Workbooks.Add ActiveWorkbook.SaveAs Filename:="C:\Users\SK\Desktop\Отчеты\Отчет по визитам 1.xlsx" Else Workbooks.Open Filename:=("C:\Users\SK\Desktop\Отчеты\Отчет по визитам 1.xlsx" 'проверка на наличие листа и создание при его отсутствии On Error Resume Next 'Sheets("Компания1").Activate 'or With Sheets("Компания1"): End With If Err Then Sheets.Add(after:=Sheets(Sheets.Count)).Name = "Компания1": Err.Clear On Error GoTo 0 'переходим в активную книгу откуда необходимо скопировать данные abook.Worksheets("1").Activate Range("A:I").Copy 'копируем определенный диапазон листа bookconst.Worksheets("Компания1").Activate 'активируем лист куда необходимо вставить данные Range("K1").Select 'встаем на ячейку 'вставляем данные ячеек Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'вставляем форматы ячеек Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False 'удаляем столбцы Columns("A:J").Select Selection.Delete Shift:=xlToLeft End If 'сохранить текущую книгу bookconst.Save 'Закрыть книгу bookconst.Close abook.Activate
If Dir("C:\Users\SK\Desktop\Отчеты\Отчет по визитам 2.xlsx") = "" Then Workbooks.Add ActiveWorkbook.SaveAs Filename:="C:\Users\SK\Desktop\Отчеты\Отчет по визитам 2.xlsx" Else Workbooks.Open Filename:=("C:\Users\SK\Desktop\Отчеты\Отчет по визитам 2.xlsx" 'проверка на наличие листа и создание при его отсутствии On Error Resume Next 'Sheets("Компания2").Activate 'or With Sheets("Компания2"): End With If Err Then Sheets.Add(after:=Sheets(Sheets.Count)).Name = "Компания2": Err.Clear On Error GoTo 0 'переходим в активную книгу откуда необходимо скопировать данные abook.Worksheets("2").Activate Range("A:I").Copy 'копируем определенный диапазон листа bookconst.Worksheets("Компания2").Activate 'активируем лист куда необходимо вставить данные Range("K1").Select 'встаем на ячейку 'вставляем данные ячеек Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'вставляем форматы ячеек Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False 'удаляем столбцы Columns("A:J").Select Selection.Delete Shift:=xlToLeft End If 'сохранить текущую книгу bookconst.Save 'Закрыть книгу bookconst.Close abook.Activate
End Sub
[/vba]
Понимаю что можно его оптимизировать, но не знаю как Помогите пожалуйста.
Добрый день, помогите пожалуйста с макросом.
Имеется один общий файл компании, в котором сводится вся информация по работе с поставщиками. 1 лист - 1 поставщик Требуется определить имя листа и из этого файла, скопировать с него данные, найти в папке документ содержащий имя листа, открыть его и вставить скопированную информацию с заменой имеющихся данных. Если при поиске файлов, не удается найти документ в котором содержится имя листа, то создать новый файл с определенным именем. Кол-во листов в документе и файлов со временем будет добавляться.
Пример: "Общий документ" - В документе 10 листов (Лист1 , Лист2, Лист3, ... , Лист10) В папке 10 документов (Поставщик Лист1, Поставщик Лист2, ... , Потсавщик Лист10) Надо данные из "Общий документ" с "Лист1" скопировать в документ "Поставщик Лист1", с "Лист2" скопировать в документ "Поставщик Лист2" и тд.
На данный момент есть вот такой макрос, все данные вводятся в ручную:
[vba]
Код
Sub Копируем_листы_в_другую_книгу()
Dim bookconst As Workbook Dim abook As Workbook Application.ScreenUpdating = False 'отключаем обновление экрана для скорости Set abook = ActiveWorkbook 'присваиваем перменную активной книге 'открываем книгу, если не существует, то создаем If Dir("C:\Users\SK\Desktop\Отчеты\Отчет по визитам 1.xlsx") = "" Then Workbooks.Add ActiveWorkbook.SaveAs Filename:="C:\Users\SK\Desktop\Отчеты\Отчет по визитам 1.xlsx" Else Workbooks.Open Filename:=("C:\Users\SK\Desktop\Отчеты\Отчет по визитам 1.xlsx" 'проверка на наличие листа и создание при его отсутствии On Error Resume Next 'Sheets("Компания1").Activate 'or With Sheets("Компания1"): End With If Err Then Sheets.Add(after:=Sheets(Sheets.Count)).Name = "Компания1": Err.Clear On Error GoTo 0 'переходим в активную книгу откуда необходимо скопировать данные abook.Worksheets("1").Activate Range("A:I").Copy 'копируем определенный диапазон листа bookconst.Worksheets("Компания1").Activate 'активируем лист куда необходимо вставить данные Range("K1").Select 'встаем на ячейку 'вставляем данные ячеек Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'вставляем форматы ячеек Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False 'удаляем столбцы Columns("A:J").Select Selection.Delete Shift:=xlToLeft End If 'сохранить текущую книгу bookconst.Save 'Закрыть книгу bookconst.Close abook.Activate
If Dir("C:\Users\SK\Desktop\Отчеты\Отчет по визитам 2.xlsx") = "" Then Workbooks.Add ActiveWorkbook.SaveAs Filename:="C:\Users\SK\Desktop\Отчеты\Отчет по визитам 2.xlsx" Else Workbooks.Open Filename:=("C:\Users\SK\Desktop\Отчеты\Отчет по визитам 2.xlsx" 'проверка на наличие листа и создание при его отсутствии On Error Resume Next 'Sheets("Компания2").Activate 'or With Sheets("Компания2"): End With If Err Then Sheets.Add(after:=Sheets(Sheets.Count)).Name = "Компания2": Err.Clear On Error GoTo 0 'переходим в активную книгу откуда необходимо скопировать данные abook.Worksheets("2").Activate Range("A:I").Copy 'копируем определенный диапазон листа bookconst.Worksheets("Компания2").Activate 'активируем лист куда необходимо вставить данные Range("K1").Select 'встаем на ячейку 'вставляем данные ячеек Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'вставляем форматы ячеек Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False 'удаляем столбцы Columns("A:J").Select Selection.Delete Shift:=xlToLeft End If 'сохранить текущую книгу bookconst.Save 'Закрыть книгу bookconst.Close abook.Activate
End Sub
[/vba]
Понимаю что можно его оптимизировать, но не знаю как Помогите пожалуйста.S_K_