Доброго времени суток всем! Помогите подправить макрос экспорта содержимого ячейки F2:F99 из Excel в txt. Но не в сумме всех ячеек в один файл, а каждая отдельная ячейка из диапазона F2:F99 в новый файл при этом имя файла берется из ячейки допустим J2:J99 по такому принципу данные из F2 сохраняются в файл с именем из J2, и так до F99 c именем из J99. В итоге должно быть 98 файлов. нашел пример:
Код
Sub ExportAsText()
Open "C:\primer_" & Format(Now, "DD MM YYYY HH-NN-SS") & ".txt" For Output As #1
Print #1, Join(Application.Transpose([f2:f99].Value), vbLf)
Close #1
End Sub
но он сохраняет все в один файл, и имя файла получается с датой, а не из соответствующей ячейки. Форматирование кода: [МОДЕРАТОР]
моя проблема очень подходит под название этой темы - ребята, может кто знает ответ?
соединила идеи отсюда http://www.excelworld.ru/forum/10-4381-1 под свою ситуацию (насколько смогла), но на выходе не совсем то, что надо получаю... может у кого есть идеи? файл вкладываю (максимально схожий с оригиналом, без лишних листов) - с макросом, который скидывает Selection в txt в нужную папку с разделителем " ; " - Selection - это диапазон в двух рамках на листе в моём случае (L20:P37)
Только ещё 3 задачи надо решить: 1. чтобы эти диапазоны скидывались в разные txt файлы (т е надо как-то чтобы макрос сам понимал ГДЕ ему заканчивать писать 1-й txt и начинать писать 2-й txt, или может чтобы он сам как-то Selection разбивал на 2 диапазона - не знаю как реализовать) 2. названия образуемых файлов, чтобы были из ячеек - Дата, Тикер - в смысле в данном случае по такому принципу 20140320_BP и 20140320_EC... т е верхние 2 ячейки, в каждом обведённом рамкой в файле диапазоне... - хотя для запуска макроса лучше один раз выделить весь диапазон(из которого сформировать 2 файла) 3. ну, и соответственно, без лишних записей в самих txt файлах (тоже приложу их, что надо получить на выходе)
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
а макрос, который приложила пока выдаёт такой вариант - всё скопом... и имя нужно другое... на всякий случай приложу и НЕверный вариант - итог такого макроса, как он есть... а как его доработать - ?..
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
Sanja пишет: по п.1 - а почему нельзя запустить макрос ДВАЖДЫ? Выделяя диапазоны по очереди ручками
потому что столько всего приходится выделять ручками при обработке исходных данных и подправлять столько формул... что к окончанию уже голова кругом идёт, чтобы ручками успевать выделять то, что надо, не сбиться случайно, потому что это лишь малая часть рабочего варианта... ещё и после экспорта и переноса в др программу - собраться с силами и после всего перегруза расшифровать верно сложившуюся ситуацию... мозг закипает иногда, особенно потому что времени на всё ЭТО очень мало... вот и пытаюсь максимально автоматизировать...
может быть, если не использовать Selection, а задать конкретные диапазоны (которые в файле выделены в рамку) - как постоянные величины для определения границ массива - конкретные ячейки J22:N27 для BP, и J32:J37 для EC - то макросу даже выделенное указывать не надо будет- и просто 2 раза можно прогнать по одному циклу... или как... но честно говоря что-то у меня не получается пока... не совсем понимаю макрос отсюда http://www.planetaexcel.ru/forum/?PAGE_NAME=read&FID=1&TID=46741
в любом случае и вопрос с именем образуемых txt остаётся...
Sanja.если такой вариант проще (как я сейчас описала) - то, может, это было бы и лучше... а потом если ещё диапазоны такие появятся (в ходе др расчётов) - то я уже в код внесу и новые диапазоны... просто все ещё не доработаны... а мониторить пока надо хоть эти расчёты и видеть их результаты... после всего что делается ручками
вобщем, если вы знаете как сделать такое - очень сильно спасли бы меня... мы с excel и vba ещё только в процессе знакомста др с др... :|
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
я не рунописец VBA но видя что они тут творят, я бы попросил доработать макрос таким способом, в ячейках не задействованых в выгрузке или какой нибудь форме созданой в VBA указывать № столбца например B это 2 и наименование файла к примеру оно находтся в B3
JeyCi пишет: если не использовать Selection, а задать конкретные диапазоны
да это, собственно, тоже костыль. Та же работа ручками. Вот если бы Вы могли указать признак, по которому-бы однозначно определялся диапазон. А сами эти диапазоны вы как создаете? В ручную? Может стоит сразу из исходных данных копировать в TXT, минуя этот промежуточный этап?
Sanja пишет: А сами эти диапазоны вы как создаете?
это вообще цифры из др файла - который очень навороченный формулами - выдёргиваю их в новую книгу.xls по рабоче-крестьянски формулой с сылкой на др книгу (ячейки в принципе там постоянны, просто для упрощения во вложенном файле заменила формулы на значения) - полученную раскладку из файла вложенного ранее распечатываю как план (слева ещё поля оглавления есть - но не в этом суть)... а из итоговой таблицы (файла вложенного выше - формулами выдёргиваю отдельно то, что надо скинуть в txt - в поля обведённые рамкой... если миновать этот этап - боюсь сам макрос запутается в моих расчётах - поэтому для него всё нужное сливаю в один диапазон...
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
Sanja пишет: Вот если бы Вы могли указать признак, по которому-бы однозначно определялся диапазон.
есть идея - можно убрать пустую строку между ячейками из будущего названия файла и самими данными, которые попадут в файл... тогда окончание одного диапазона - это пустая строка... и начало следующего диапазона - где снова есть cell.value - дата,тикер для названия файла и с новой строки данные для самого файла txt (- если опять же убрать пустую строку между первыми двумя ячейками для названия и данными для самого файла)... ну, а потом что-нибудь типа "while-wend"... пока не наткнётся на пустую строку... а как наткнётся приступать к обработке нового диапазона в Selection... то есть цикл в цикле... только пока не получается организовать эти циклы... думаю, макрос, наверно, может разделить сам всю Selection на рабочие диапазоны...имхо... если ему правильно сказать
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
вот пока у меня получился такой вариант - для работы с одним диапазоном - если выделить только один - (вкладываю) - название файла нашла способ сделать сегодняшней датой и в нужном выражении... только вот дата в названии должна быть не сегодняшняя, а из первой ячейки Selection (зона обведённая рамкой в файле)... может кто знает как подправить хоть такой код для начала :| ... а потом уже подумать про циклы...
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
Sanja пишет: Попробуйте. Комментарии в коде макроса
Код
и если её формат соответствует формату "01.01.2014" ... производится его копирование в TXT
Код
flName = .Offset(, -1).Value & "_" & cl
Код
With .CreateTextFile("D:\" & flName & ".txt", True) 'Пропишите свой путь к создаваемым файлам TXT!!!
.Write s
.Close
End With
знаете, вобщем, очень даже красиво ... thanks... только количество строк, возможно придётся увеличить - но я тогда и в макросе цифру подправлю... и тикеры др появятся ещё - тоже допишу... только помогите please справится ещё с названием выкидываемых файлов - чтобы формировался НЕ 20.03.2014_BP, а 20140320_BP... КАК задать макросу цель конвертировать ячейку из формата "01.01.2014" в вид "20140101" (YYYYMMDD) на этапе использования её для названия TXT - просто программа под которую выкидываются эти файлы читает только такое название файлов... этот штрих - ещё больше украсит ваш макрос ... а вобщем, он (ваш макрос) работает как швейцарские часы... спасибо! буду экспериментировать (когда придётся)
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
и файлы, формируемые, теперь сразу съедаются нужной софтиной, в нужном виде ... без лишних телодвижений ... мне теперь все выходные будет чем заняться ... буду кормить эту софтину... нужными цифрами и вам желаю удачных выходных... ещё раз спасибо Sanja !!
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
JeyCi пишет: и тикеры др появятся ещё - тоже допишу...
с этим проблем тоже не возникло... добавила ещё Or .Value = ... всё считывается как положено... и всё-таки очень хочется найти ещё один ответ на один нескромный вопрос...
Код
For Each cl In ThisWorkbook.Worksheets("LOAD").Range("T1:T100")
как задать лист НЕ по имени, а попросить макрос обращаться к Текущему листу (ThisWorksheet) ?? попробовала - выкинул пустой файл... попробовала ещё
Код
Dim shName As String
и в строке выше вместо имени вставила ThisWorkbook.Worksheets(shName), но не так всё просто оказалось... а надо бы просмотреть и свои архивные цифры и на др листах... может можно как-нибудь обращаться к текущему листу из этого макроса? ... чтобы жизнь стала ещё ярче
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
Юрий М, Activesheet - то что надо!... господа, вашей литературной грамотности нет границ в этом языке... thanks
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
JayBhagavan пишет: но дал сбой интерпретатор между мозгом и пальцами рук. Извините.
... очень знакомо... всегда удивляюсь, почему excel'ю такое не может быть знакомо... с ним бы было намного легче общаться... ещё раз спасибо, ребята
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)