Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/C листа копируются данные и создается отдельный лист. - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » C листа копируются данные и создается отдельный лист. (По заданному условию, скопировать на другой лист.)
C листа копируются данные и создается отдельный лист.
wwizard Дата: Воскресенье, 08.11.2015, 02:59 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 176
Репутация: 0 ±
Замечаний: 40% ±

Прошу меня простить, за очередной глупый вопрос. Попробовал найти похожее не нашел. Нужен простой скрипт который по заданному условию, сможет создать новую книгу исходя из предыдущей.

Есть прайс-лист. В нем 4ре листа. Певый лист сам прайс, в котором в 10й колонке содержится "производитель" продукта.
На Листе 4 - данного прайс-листа указаны производители которые нужны в отдельном прайс-листе.

Требуется. После запуска скрипта, комбинацией клавиш Alt+F8, чтобы он создал отдельную книгу, и скопировал туда первую строку прайс-листа и строки ТОЛЬКО с теми производителями которые указаны на Листе4. После создания данного листа произошло его сохранение, (скажем в папку C:/Yonotan/picsel/ с именем YOYO-1 и далее он остался в открытом виде.)
К сообщению приложен файл: probaYO.xlsm (38.5 Kb)
 
Ответить
СообщениеПрошу меня простить, за очередной глупый вопрос. Попробовал найти похожее не нашел. Нужен простой скрипт который по заданному условию, сможет создать новую книгу исходя из предыдущей.

Есть прайс-лист. В нем 4ре листа. Певый лист сам прайс, в котором в 10й колонке содержится "производитель" продукта.
На Листе 4 - данного прайс-листа указаны производители которые нужны в отдельном прайс-листе.

Требуется. После запуска скрипта, комбинацией клавиш Alt+F8, чтобы он создал отдельную книгу, и скопировал туда первую строку прайс-листа и строки ТОЛЬКО с теми производителями которые указаны на Листе4. После создания данного листа произошло его сохранение, (скажем в папку C:/Yonotan/picsel/ с именем YOYO-1 и далее он остался в открытом виде.)

Автор - wwizard
Дата добавления - 08.11.2015 в 02:59
nilem Дата: Воскресенье, 08.11.2015, 10:40 | Сообщение № 2
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
wwizard, Вы, наверное, не в той ветке создали тему?
вот здесь есть похожий пример


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениеwwizard, Вы, наверное, не в той ветке создали тему?
вот здесь есть похожий пример

Автор - nilem
Дата добавления - 08.11.2015 в 10:40
wwizard Дата: Воскресенье, 08.11.2015, 11:16 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 176
Репутация: 0 ±
Замечаний: 40% ±

Да, верно, я пробовал по нему, но получается лишь перенести на новый лист, а мне надо на новую книгу
 
Ответить
СообщениеДа, верно, я пробовал по нему, но получается лишь перенести на новый лист, а мне надо на новую книгу

Автор - wwizard
Дата добавления - 08.11.2015 в 11:16
nilem Дата: Воскресенье, 08.11.2015, 12:14 | Сообщение № 4
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
там в файле есть примерчик для новой книги
типа такого:
[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]


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениетам в файле есть примерчик для новой книги
типа такого:
[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]

Автор - nilem
Дата добавления - 08.11.2015 в 12:14
wwizard Дата: Воскресенье, 08.11.2015, 15:01 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 176
Репутация: 0 ±
Замечаний: 40% ±

Да но как сделать, чтобы именно:

создалась отдельную книгу, и скопировал туда первую строку прайс-листа и строки ТОЛЬКО с теми производителями которые указаны на Листе4.
 
Ответить
СообщениеДа но как сделать, чтобы именно:

создалась отдельную книгу, и скопировал туда первую строку прайс-листа и строки ТОЛЬКО с теми производителями которые указаны на Листе4.

Автор - wwizard
Дата добавления - 08.11.2015 в 15:01
nilem Дата: Воскресенье, 08.11.2015, 15:18 | Сообщение № 6
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Берете код из сообщения №4, вставляете в свой файл, проставляете в коде подходящий путь для вашей папки (строка кода с комментом "измените, как нужно") и запускаете макрос. Этот код специально изменил под вашу задачу.


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеБерете код из сообщения №4, вставляете в свой файл, проставляете в коде подходящий путь для вашей папки (строка кода с комментом "измените, как нужно") и запускаете макрос. Этот код специально изменил под вашу задачу.

Автор - nilem
Дата добавления - 08.11.2015 в 15:18
wwizard Дата: Воскресенье, 08.11.2015, 15:25 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 176
Репутация: 0 ±
Замечаний: 40% ±

Пишет вот такую ошибку: http://prntscr.com/90dz0u Которая ругается на: http://prntscr.com/90dz8m
а именно, на: [vba]
Код
   .AutoFilter 10, f, 7
[/vba]
 
Ответить
СообщениеПишет вот такую ошибку: http://prntscr.com/90dz0u Которая ругается на: http://prntscr.com/90dz8m
а именно, на: [vba]
Код
   .AutoFilter 10, f, 7
[/vba]

Автор - wwizard
Дата добавления - 08.11.2015 в 15:25
nilem Дата: Воскресенье, 08.11.2015, 15:36 | Сообщение № 8
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
можно еще строчку добавить
[vba]
Код
With Sheets("Лист1").Range("A1").CurrentRegion
    .AutoFilter 'вот эту строку вставить
    .AutoFilter 10, f, 7
[/vba]
но это не важно. Должно работать, у вас Ексель не 2003?


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениеможно еще строчку добавить
[vba]
Код
With Sheets("Лист1").Range("A1").CurrentRegion
    .AutoFilter 'вот эту строку вставить
    .AutoFilter 10, f, 7
[/vba]
но это не важно. Должно работать, у вас Ексель не 2003?

Автор - nilem
Дата добавления - 08.11.2015 в 15:36
RAN Дата: Воскресенье, 08.11.2015, 15:52 | Сообщение № 9
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
у вас Ексель не 2003?

2007 тоже может с фильтром глючить. (Причем не все сборки, а избранные)
Делал как-то костыль
[vba]
Код
        '60            .AutoFilter.Range.Offset(1).Delete Shift:=xlUp ' Excel 2010
60      .AutoFilter.Range.Offset(1).SpecialCells(xlCellTypeVisible).EntireRow.Delete Shift:=xlUp    ' Excel 2007
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
у вас Ексель не 2003?

2007 тоже может с фильтром глючить. (Причем не все сборки, а избранные)
Делал как-то костыль
[vba]
Код
        '60            .AutoFilter.Range.Offset(1).Delete Shift:=xlUp ' Excel 2010
60      .AutoFilter.Range.Offset(1).SpecialCells(xlCellTypeVisible).EntireRow.Delete Shift:=xlUp    ' Excel 2007
[/vba]

Автор - RAN
Дата добавления - 08.11.2015 в 15:52
wwizard Дата: Понедельник, 09.11.2015, 17:42 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 176
Репутация: 0 ±
Замечаний: 40% ±

'вот эту строку вставить


какую?
 
Ответить
Сообщение
'вот эту строку вставить


какую?

Автор - wwizard
Дата добавления - 09.11.2015 в 17:42
wwizard Дата: Понедельник, 09.11.2015, 17:45 | Сообщение № 11
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 176
Репутация: 0 ±
Замечаний: 40% ±

Ничего не понимаю. Ругается: http://prntscr.com/90sxtw
Ексель 2007
 
Ответить
СообщениеНичего не понимаю. Ругается: http://prntscr.com/90sxtw
Ексель 2007

Автор - wwizard
Дата добавления - 09.11.2015 в 17:45
wwizard Дата: Понедельник, 09.11.2015, 18:05 | Сообщение № 12
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 176
Репутация: 0 ±
Замечаний: 40% ±

Вот мой пример. Колонка 10 отвечает за производителя. На четвертом листе написано, его название - Отд-прайс. Туда я вписываю значение с 10й колонки. Например Apple.

Именно эту строку с этим производителем в 10й строчке, я хочу чтобы скопировалось на новую книгу.

Чего я уже только не пробовал, даже старую свою тему нашел: http://www.excelworld.ru/forum/10-5899-1 - все равно не могу сделать чтобы зароботало.
Ваш RAN, скрипт вставлен прямо в пример, но так и не заработал.
К сообщению приложен файл: Proba-new-kniga.xlsm (24.9 Kb)
 
Ответить
СообщениеВот мой пример. Колонка 10 отвечает за производителя. На четвертом листе написано, его название - Отд-прайс. Туда я вписываю значение с 10й колонки. Например Apple.

Именно эту строку с этим производителем в 10й строчке, я хочу чтобы скопировалось на новую книгу.

Чего я уже только не пробовал, даже старую свою тему нашел: http://www.excelworld.ru/forum/10-5899-1 - все равно не могу сделать чтобы зароботало.
Ваш RAN, скрипт вставлен прямо в пример, но так и не заработал.

Автор - wwizard
Дата добавления - 09.11.2015 в 18:05
nilem Дата: Понедельник, 09.11.2015, 20:29 | Сообщение № 13
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
У вас в примере появился пустой столбец G, поэтому CurrentRegion не охватывает все столбцы, какие нужны
пробуйте так:


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеУ вас в примере появился пустой столбец G, поэтому CurrentRegion не охватывает все столбцы, какие нужны
пробуйте так:

Автор - nilem
Дата добавления - 09.11.2015 в 20:29
wwizard Дата: Вторник, 10.11.2015, 03:56 | Сообщение № 14
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 176
Репутация: 0 ±
Замечаний: 40% ±

Получается что он всегда сохраняет с одним и тем же именем, и если в папке уже есть такой файл, то вылетает ошибка. А если убрать сохранение, то я убираю только это?

[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 - Вторник, 10.11.2015, 05:01
 
Ответить
СообщениеПолучается что он всегда сохраняет с одним и тем же именем, и если в папке уже есть такой файл, то вылетает ошибка. А если убрать сохранение, то я убираю только это?

[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
Дата добавления - 10.11.2015 в 03:56
nilem Дата: Вторник, 10.11.2015, 07:47 | Сообщение № 15
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
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]
Код
.SaveAs Filename:=sPath, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
            DoEvents:    '.Close
[/vba]
... вариантов на самом деле больше :)


Яндекс.Деньги 4100159601573
 
Ответить
Сообщение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]
Код
.SaveAs Filename:=sPath, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
            DoEvents:    '.Close
[/vba]
... вариантов на самом деле больше :)

Автор - nilem
Дата добавления - 10.11.2015 в 07:47
Мир MS Excel » Вопросы и решения » Вопросы по VBA » C листа копируются данные и создается отдельный лист. (По заданному условию, скопировать на другой лист.)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!