Добрый вечер коллеги, помогите пожалуйста с макросом разделения листа на книги. Признаюсь честно, видел темы похожие, но кругом какие то, так сказать, слегка корявенькие макросы. Я пытался писать через занесения первого столбца уникальных значений в массив, а потом поочередно делать по каждому элементу массива фильтр по столбцу А, потом копировать весь диапазон отфильтрованный на новый лист и перемещать лист в новую книгу (файл с наработкой оставил на работе), но всё равно мне как то не очень нравится такой вариант, можете помочь на простом примере?
Добрый вечер коллеги, помогите пожалуйста с макросом разделения листа на книги. Признаюсь честно, видел темы похожие, но кругом какие то, так сказать, слегка корявенькие макросы. Я пытался писать через занесения первого столбца уникальных значений в массив, а потом поочередно делать по каждому элементу массива фильтр по столбцу А, потом копировать весь диапазон отфильтрованный на новый лист и перемещать лист в новую книгу (файл с наработкой оставил на работе), но всё равно мне как то не очень нравится такой вариант, можете помочь на простом примере?DJ_Marker_MC
anvg, Спасибо большое, оно конечно работает (и работает хорошо), но так как я с АДО не работал никогда, то честно сказать немного трудно разобраться и понять каким образом происходить отбор значения например. При пошаговом выполнении понял что за это у вас отвечает currentSet и внутри него есть параметр Source, но я так и не понял как его можно вытащить для того чтоб при сохранении книги давать ей имя отобранного в данный момент значения? кроме как давать имя книги при сохранении взяв для этого значение с ячейки А2 ничего не придумал (но это костыль).
И всё таки хочу попросить у Вас, друзья, решение без использования ADO (для души роднее, а с ADO посижу почитаю в свободное время на этом примере что к чему)
anvg, Спасибо большое, оно конечно работает (и работает хорошо), но так как я с АДО не работал никогда, то честно сказать немного трудно разобраться и понять каким образом происходить отбор значения например. При пошаговом выполнении понял что за это у вас отвечает currentSet и внутри него есть параметр Source, но я так и не понял как его можно вытащить для того чтоб при сохранении книги давать ей имя отобранного в данный момент значения? кроме как давать имя книги при сохранении взяв для этого значение с ячейки А2 ничего не придумал (но это костыль).
И всё таки хочу попросить у Вас, друзья, решение без использования ADO (для души роднее, а с ADO посижу почитаю в свободное время на этом примере что к чему)DJ_Marker_MC
Public Sub www() Dim i&, a a = [a1].CurrentRegion With CreateObject("scripting.dictionary") For i = 2 To UBound(a): .Item(a(i, 1)) = "": Next a = .keys End With For i = 0 To UBound(a) Sheets(1).Copy With ActiveSheet.[a1].CurrentRegion .AutoFilter 1, "<>" & a(i) .Offset(1).SpecialCells(12).EntireRow.Delete With .Parent .AutoFilterMode = 0: .Name = a(i) .Parent.SaveAs ThisWorkbook.Path & "\" & a(i) & ".xlsx", 51 .Parent.Close End With End With Next End Sub
[/vba]
[vba]
Код
Public Sub www() Dim i&, a a = [a1].CurrentRegion With CreateObject("scripting.dictionary") For i = 2 To UBound(a): .Item(a(i, 1)) = "": Next a = .keys End With For i = 0 To UBound(a) Sheets(1).Copy With ActiveSheet.[a1].CurrentRegion .AutoFilter 1, "<>" & a(i) .Offset(1).SpecialCells(12).EntireRow.Delete With .Parent .AutoFilterMode = 0: .Name = a(i) .Parent.SaveAs ThisWorkbook.Path & "\" & a(i) & ".xlsx", 51 .Parent.Close End With End With Next End Sub
KuklP, Коротко и ясно))) Большое спасибо. Уже не впервые выручаете. На самом деле макрос является полезным думаю многим и удивляюсь почему его как таково нигде нет до сих пор в копилках наработанных ценностей. Вижу смысл универсализировать, добавить еще две переменных Inbox с указанием столбца идентификатора и строка шапки. Но с этим не проблема.
На живом примере отработал отлично... Благодарю!
KuklP, Коротко и ясно))) Большое спасибо. Уже не впервые выручаете. На самом деле макрос является полезным думаю многим и удивляюсь почему его как таково нигде нет до сих пор в копилках наработанных ценностей. Вижу смысл универсализировать, добавить еще две переменных Inbox с указанием столбца идентификатора и строка шапки. Но с этим не проблема.
На живом примере отработал отлично... Благодарю!DJ_Marker_MC
Ребята, а что это за глюк такой и как от него избавится??? После отработки данного макроса, книги закрываются, но висят в памяти редактора VBA до выхода из ексель. замена .parent.close на ActiveWorkbook.Close перед Next от глюка не избавило.
Ребята, а что это за глюк такой и как от него избавится??? После отработки данного макроса, книги закрываются, но висят в памяти редактора VBA до выхода из ексель. замена .parent.close на ActiveWorkbook.Close перед Next от глюка не избавило.DJ_Marker_MC
Это у Вас реально глюк. У меня такого нет. Все книги корректно закрываются и выгружаются из памяти. Попробуйте пощелкать по модулям тех книг, что будет?
Это у Вас реально глюк. У меня такого нет. Все книги корректно закрываются и выгружаются из памяти. Попробуйте пощелкать по модулям тех книг, что будет?KuklP
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com WM Z206653985942, R334086032478, U238399322728
KuklP, Модулей нет, есть только один объект Лист1, даже ЭтаКнига нет, но когда открываешь просто уже сохранённый файл, то там всё ок. Попробую в понедельник еще на рабочей машине, хотя домашнюю еще не перезагружал)))) Кстати, я эту тему вынес в готовые решения с небольшими коррективами от себя http://www.excelworld.ru/forum/3-9187-1
KuklP, Модулей нет, есть только один объект Лист1, даже ЭтаКнига нет, но когда открываешь просто уже сохранённый файл, то там всё ок. Попробую в понедельник еще на рабочей машине, хотя домашнюю еще не перезагружал)))) Кстати, я эту тему вынес в готовые решения с небольшими коррективами от себя http://www.excelworld.ru/forum/3-9187-1DJ_Marker_MC