Всем привет. Прошу помочь со следующей задачей. есть файл с данными, который необходимо разделить на, порядка, 32000 файлов для рассылки сответствующим клиентам. Файл следует разделить по признаку "Зона доставки" (в примере залит желтым цветом) и этой же зоной доставки назвать разрезанный файл. Кол-во зон доставок разное, а значит и файл должен делиться на файлы с разным кол-вом строк. На просторах инета нашел решение похожей задачи, но там начало и конец среза ознаменованы конкретными словами ("всего" и "контрагент" ) . Вполне возможно его можно адаптировать под мою задачу, но у меня не хватает знаний...
Код
Sub ertert()
Dim fn As String, wsh As Worksheet, wb As Object
Dim r As Range, rr As Range, s As String, ss As String
Application.ScreenUpdating = False
ActiveSheet.Copy Before:=Sheets(1)
Set wsh = ActiveSheet: s = "ВСЕГО": ss = "Контрагент"
With wsh.UsedRange.Columns("B:B")
Do
Set r = .Find(s, lookat:=xlWhole)
If Not r Is Nothing Then
With .Cells(1, 1).Resize(r.Row)
Set rr = .Find(ss, lookat:=xlWhole)
If Not rr Is Nothing Then
fn = ThisWorkbook.Path & "\" & Replace(rr(1, 2), """", "")& "_" & rr(2, 2) & ".xls"
Set wb = Workbooks.Add
.EntireRow.Copy
wb.Sheets(1).Range("A1").PasteSpecial Paste:=xlPasteAll
wb.Sheets(1).Range("A1").PasteSpecial Paste:=xlPasteColumnWidths
wb.SaveAs fn, xlNormal: DoEvents: wb.Close
End If
.EntireRow.Delete
End With
End If
Loop Until r Is Nothing
End With
МатросНаЗебре, да, вы правы) спасибо за замечание. Уже не буду переделывать, так как у вас всё верно) Я тоже в качестве конструктивной критики предлагала бы "Application.StatusBar = False" заканчивать процедуру, а не "Готово". Не знаю чем чревато кроме как убирается кнопка записи макроса. Но мне кажется так правильнее.
МатросНаЗебре, и все остальные уважаемые знатоки, помогите пожалуйста. Первый предложенный код работает безошибочно. Но есть один недостаток. Мой файл (полный аналог примера) в оригинале содержит порядка 140 000 строк, который примерно должен делится на 30-32 тыс файлов. Недостаток в том, что все разрезанные файлы код держит открытыми, и только по окончании тотального разрезания закрывает файлы. Видимо из-за большого числа открытых файлов заканчивается память (ИМХО) и случается: 1) на каком-то по счету файле (при тестировании каждый раз разное кол-во) выдает ошибку run time error out of range 2) или же начиная с какого-то по счету файле режет и именует так как надо, но технически просто клонирует оригинальный файл и сохраняет не открывая.
Но если предварительно большой файл разрезать на 6-7 файлов (по 20-23 тыс строк) то с каждым файлом код работает корректно.
Как быть? можно ли изменить код так, чтобы он сперва закрывал созданный файл, и только потом приступал к следующему созданию файла?
adike, если у вас поля по которым идет нарезка идут _по порядку_, то попробуйте код из #5. Там как раз идет нарезка, файл закрывается. Пс вы бы хоть попробовали все предложенные вам варианты прежде чем писать.
У меня задача похожая, немного макросы я под себя адаптировала. Файл нужно разделить по первой колонке "Класс" Разница в том, что нужно сохранить в новых файлах исходное форматирование и формулы. На это у меня совсем не хватает знаний - такое возможно в принципе?
whisper79 написал: немного макросы я под себя адаптировала. Разница в том, что ...
не видно в файле макроса, чтобы видеть, что не так
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)