Прошу меня простить, за очередной глупый вопрос. Попробовал найти похожее не нашел. Нужен простой скрипт который по заданному условию, сможет создать новую книгу исходя из предыдущей.
Есть прайс-лист. В нем 4ре листа. Певый лист сам прайс, в котором в 10й колонке содержится "производитель" продукта. На Листе 4 - данного прайс-листа указаны производители которые нужны в отдельном прайс-листе.
Требуется. После запуска скрипта, комбинацией клавиш Alt+F8, чтобы он создал отдельную книгу, и скопировал туда первую строку прайс-листа и строки ТОЛЬКО с теми производителями которые указаны на Листе4. После создания данного листа произошло его сохранение, (скажем в папку C:/Yonotan/picsel/ с именем YOYO-1 и далее он остался в открытом виде.)
Прошу меня простить, за очередной глупый вопрос. Попробовал найти похожее не нашел. Нужен простой скрипт который по заданному условию, сможет создать новую книгу исходя из предыдущей.
Есть прайс-лист. В нем 4ре листа. Певый лист сам прайс, в котором в 10й колонке содержится "производитель" продукта. На Листе 4 - данного прайс-листа указаны производители которые нужны в отдельном прайс-листе.
Требуется. После запуска скрипта, комбинацией клавиш Alt+F8, чтобы он создал отдельную книгу, и скопировал туда первую строку прайс-листа и строки ТОЛЬКО с теми производителями которые указаны на Листе4. После создания данного листа произошло его сохранение, (скажем в папку C:/Yonotan/picsel/ с именем YOYO-1 и далее он остался в открытом виде.)wwizard
там в файле есть примерчик для новой книги типа такого: [vba]
Код
Sub ertert() Dim f, sPath$ sPath = "E:\Downloads\YOYO1.xlsx" 'измените, как нужно
With Application .ScreenUpdating = False: .DisplayAlerts = False End With With Sheets("Отд-прайс") f = Application.Transpose(.Range("A1", .Cells(Rows.Count, 1).End(xlUp))) End With With Sheets("Лист1").Range("A1").CurrentRegion .AutoFilter 10, f, 7 .Copy With Workbooks.Add .Sheets(1).Range("A1").Select: .Sheets(1).Paste .Sheets(1).Range("A1").CurrentRegion.Columns.AutoFit .SaveAs Filename:=sPath, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False DoEvents: '.Close End With .AutoFilter End With With Application .CutCopyMode = False: .ScreenUpdating = True: .DisplayAlerts = True End With End Sub
[/vba]
там в файле есть примерчик для новой книги типа такого: [vba]
Код
Sub ertert() Dim f, sPath$ sPath = "E:\Downloads\YOYO1.xlsx" 'измените, как нужно
With Application .ScreenUpdating = False: .DisplayAlerts = False End With With Sheets("Отд-прайс") f = Application.Transpose(.Range("A1", .Cells(Rows.Count, 1).End(xlUp))) End With With Sheets("Лист1").Range("A1").CurrentRegion .AutoFilter 10, f, 7 .Copy With Workbooks.Add .Sheets(1).Range("A1").Select: .Sheets(1).Paste .Sheets(1).Range("A1").CurrentRegion.Columns.AutoFit .SaveAs Filename:=sPath, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False DoEvents: '.Close End With .AutoFilter End With With Application .CutCopyMode = False: .ScreenUpdating = True: .DisplayAlerts = True End With End Sub
Берете код из сообщения №4, вставляете в свой файл, проставляете в коде подходящий путь для вашей папки (строка кода с комментом "измените, как нужно") и запускаете макрос. Этот код специально изменил под вашу задачу.
Берете код из сообщения №4, вставляете в свой файл, проставляете в коде подходящий путь для вашей папки (строка кода с комментом "измените, как нужно") и запускаете макрос. Этот код специально изменил под вашу задачу.nilem
Вот мой пример. Колонка 10 отвечает за производителя. На четвертом листе написано, его название - Отд-прайс. Туда я вписываю значение с 10й колонки. Например Apple.
Именно эту строку с этим производителем в 10й строчке, я хочу чтобы скопировалось на новую книгу.
Чего я уже только не пробовал, даже старую свою тему нашел: http://www.excelworld.ru/forum/10-5899-1 - все равно не могу сделать чтобы зароботало. Ваш RAN, скрипт вставлен прямо в пример, но так и не заработал.
Вот мой пример. Колонка 10 отвечает за производителя. На четвертом листе написано, его название - Отд-прайс. Туда я вписываю значение с 10й колонки. Например Apple.
Именно эту строку с этим производителем в 10й строчке, я хочу чтобы скопировалось на новую книгу.
Чего я уже только не пробовал, даже старую свою тему нашел: http://www.excelworld.ru/forum/10-5899-1 - все равно не могу сделать чтобы зароботало. Ваш RAN, скрипт вставлен прямо в пример, но так и не заработал.wwizard
У вас в примере появился пустой столбец G, поэтому CurrentRegion не охватывает все столбцы, какие нужны пробуйте так:
[vba]
Код
Sub ertert() Dim f, sPath$ sPath = "E:\Downloads\YOYO1.xlsx" 'измените, как нужно With Application .ScreenUpdating = False: .DisplayAlerts = False End With With Sheets("Отд-прайс") f = Application.Transpose(.Range("A1", .Cells(Rows.Count, 1).End(xlUp))) End With With Sheets("Лист1") .AutoFilterMode = False With .Range("A1:K" & .Cells(Rows.Count, 1).End(xlUp).Row) .AutoFilter 10, f, 7 .Copy With Workbooks.Add .Sheets(1).Range("A1").Select: .Sheets(1).Paste .Sheets(1).Range("A1").CurrentRegion.Columns.AutoFit .SaveAs Filename:=sPath, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False DoEvents: '.Close End With .AutoFilter End With
End With With Application .CutCopyMode = False: .ScreenUpdating = True: .DisplayAlerts = True End With End Sub
[/vba]
У вас в примере появился пустой столбец G, поэтому CurrentRegion не охватывает все столбцы, какие нужны пробуйте так:
[vba]
Код
Sub ertert() Dim f, sPath$ sPath = "E:\Downloads\YOYO1.xlsx" 'измените, как нужно With Application .ScreenUpdating = False: .DisplayAlerts = False End With With Sheets("Отд-прайс") f = Application.Transpose(.Range("A1", .Cells(Rows.Count, 1).End(xlUp))) End With With Sheets("Лист1") .AutoFilterMode = False With .Range("A1:K" & .Cells(Rows.Count, 1).End(xlUp).Row) .AutoFilter 10, f, 7 .Copy With Workbooks.Add .Sheets(1).Range("A1").Select: .Sheets(1).Paste .Sheets(1).Range("A1").CurrentRegion.Columns.AutoFit .SaveAs Filename:=sPath, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False DoEvents: '.Close End With .AutoFilter End With
End With With Application .CutCopyMode = False: .ScreenUpdating = True: .DisplayAlerts = True End With End Sub
Получается что он всегда сохраняет с одним и тем же именем, и если в папке уже есть такой файл, то вылетает ошибка. А если убрать сохранение, то я убираю только это?
[vba]
Код
With Workbooks.Add .Sheets(1).Range("A1").Select: .Sheets(1).Paste .Sheets(1).Range("A1").CurrentRegion.Columns.AutoFit .SaveAs Filename:=sPath, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False DoEvents: '.Close End With
[/vba]
Другими словами, хочу чтобы прайс создавался с именем Price-Apple но при этом НЕ сохранялся
Получается что он всегда сохраняет с одним и тем же именем, и если в папке уже есть такой файл, то вылетает ошибка. А если убрать сохранение, то я убираю только это?
[vba]
Код
With Workbooks.Add .Sheets(1).Range("A1").Select: .Sheets(1).Paste .Sheets(1).Range("A1").CurrentRegion.Columns.AutoFit .SaveAs Filename:=sPath, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False DoEvents: '.Close End With
[/vba]
Другими словами, хочу чтобы прайс создавался с именем Price-Apple но при этом НЕ сохранялсяwwizard
Сообщение отредактировал wwizard - Вторник, 10.11.2015, 05:01
1. вставляем строку On Error Resume Next: Err.Clear вот здесь: [vba]
Код
... End With On Error Resume Next: Err.Clear With Sheets("Лист1") ...
[/vba] ошибок не будет, один и тот же файл будет перезаписываться 2. чтобы каждый раз создаваемый файл сохранялся с новым именем, обычно к имени файла добавляют дату и время, т.е. вот так: [vba]
Код
sPath = "E:\Downloads\YOYO1" & Replace$(Now, ":", "_") & ".xlsx" 'измените, как нужно
[/vba] 3. ну и чтобы просто создать новую книгу без сохранения, уберите эти строки: [vba]
1. вставляем строку On Error Resume Next: Err.Clear вот здесь: [vba]
Код
... End With On Error Resume Next: Err.Clear With Sheets("Лист1") ...
[/vba] ошибок не будет, один и тот же файл будет перезаписываться 2. чтобы каждый раз создаваемый файл сохранялся с новым именем, обычно к имени файла добавляют дату и время, т.е. вот так: [vba]
Код
sPath = "E:\Downloads\YOYO1" & Replace$(Now, ":", "_") & ".xlsx" 'измените, как нужно
[/vba] 3. ну и чтобы просто создать новую книгу без сохранения, уберите эти строки: [vba]