Страницы: 1
RSS
Макрос экспорта содержимого определенных ячеек из Excel в txt,
 
Доброго времени суток всем!
Помогите подправить макрос экспорта содержимого ячейки 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
но он сохраняет все в один файл, и имя файла получается с датой, а не из соответствующей ячейки.
Форматирование кода: [МОДЕРАТОР]
Изменено: Alexof - 28.02.2014 15:42:25
 
моя проблема очень подходит под название этой темы - ребята, может кто знает ответ?

соединила идеи отсюда 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 файлах (тоже приложу их, что надо получить на выходе)

может у кого есть идеи?
Изменено: JeyCi - 21.03.2014 17:40:57
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
а макрос, который приложила пока выдаёт такой вариант - всё скопом... и имя нужно другое...
на всякий случай приложу и НЕверный вариант - итог такого макроса, как он есть...
а как его доработать - ?..
Изменено: JeyCi - 25.03.2014 11:05:29
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
JeyCi,
по п.1 - а почему нельзя запустить макрос ДВАЖДЫ? Выделяя диапазоны по очереди ручками?
Согласие есть продукт при полном непротивлении сторон
 
Цитата
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 ещё только в процессе знакомста др с др...  :|
Изменено: JeyCi - 21.03.2014 20:46:38
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
я не рунописец VBA но видя что они тут творят, я бы попросил доработать макрос таким способом, в ячейках не задействованых в выгрузке или какой нибудь форме созданой в VBA указывать № столбца например B это 2 и наименование файла к примеру оно находтся в B3
Лень двигатель прогресса, доказано!!!
 
Цитата
JeyCi пишет:
если не использовать Selection, а задать конкретные диапазоны
да это, собственно, тоже костыль. Та же работа ручками. Вот если бы Вы могли указать признак, по которому-бы однозначно определялся диапазон.
А сами эти диапазоны вы как создаете? В ручную? Может стоит сразу из исходных данных копировать в TXT, минуя этот промежуточный этап?
Изменено: Sanja - 22.03.2014 09:26:02
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Sanja пишет: А сами эти диапазоны вы как создаете?
это вообще цифры из др файла - который очень навороченный  формулами - выдёргиваю их в новую книгу.xls по рабоче-крестьянски формулой с сылкой на др книгу (ячейки в принципе там постоянны, просто для упрощения во вложенном файле заменила формулы на значения) - полученную раскладку из файла вложенного ранее распечатываю как план (слева ещё поля оглавления есть - но не в этом суть)... а из итоговой таблицы (файла вложенного выше - формулами выдёргиваю отдельно то, что надо скинуть в txt - в поля обведённые рамкой... если миновать этот этап - боюсь сам макрос запутается в моих расчётах  :)   - поэтому для него всё нужное сливаю в один диапазон...
Изменено: JeyCi - 22.03.2014 11:30:57
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
Sanja пишет:
Вот если бы Вы могли указать признак, по которому-бы однозначно определялся диапазон.
есть идея - можно убрать пустую строку между ячейками из будущего названия файла и самими данными, которые попадут в файл... тогда окончание одного диапазона - это пустая строка... и начало следующего диапазона - где снова есть cell.value - дата,тикер для названия файла и с новой строки данные для самого файла txt (- если опять же убрать пустую строку между первыми двумя ячейками для названия и данными для самого файла)... ну, а потом что-нибудь типа "while-wend"... пока не наткнётся на пустую строку... а как наткнётся приступать к обработке нового диапазона в Selection... то есть цикл в цикле... только пока не получается организовать эти циклы... думаю, макрос, наверно, может разделить сам всю Selection на рабочие диапазоны...имхо... если ему правильно сказать
Изменено: JeyCi - 22.03.2014 10:33:47
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
вот пока у меня получился такой вариант - для работы с одним диапазоном - если выделить только один - (вкладываю) - название файла нашла способ сделать сегодняшней датой и в нужном выражении... только вот дата в названии должна быть не сегодняшняя, а из первой ячейки Selection (зона обведённая рамкой в файле)... может кто знает как подправить хоть такой код для начала  :|   ... а потом уже подумать про циклы...
Изменено: JeyCi - 22.03.2014 10:45:04
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Попробуйте. Комментарии в коде макроса
Согласие есть продукт при полном непротивлении сторон
 
Цитата
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 - просто программа под которую выкидываются эти файлы читает только такое название файлов... этот штрих - ещё больше украсит ваш макрос  :)   ... а вобщем, он (ваш макрос) работает как швейцарские часы... спасибо! буду экспериментировать (когда придётся)
Изменено: JeyCi - 22.03.2014 12:39:23
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
JeyCi пишет:
только количество строк, возможно придётся увеличить
об этом я догадывался и чуть позже поправлю.
А вот с именем файла попроще. Замените "flName = ....." на эту строку
Код
flName = Right(Str(.Offset(, -1).Value), 4) & Mid(Str(.Offset(, -1).Value), 4, 2) & Left(Str(.Offset(, -1).Value), 2) & "_" & cl 
не думал что это критично
Изменено: Sanja - 22.03.2014 15:20:03
Согласие есть продукт при полном непротивлении сторон
 
Между копируемыми таблицами должна быть хотя-бы одна пустая строка.Комментарии, по традиции, в коде
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Sanja пишет:
Комментарии, по традиции, в коде
здорово! всё работает!!

Цитата
не думал что это критично
и файлы, формируемые, теперь сразу съедаются нужной софтиной, в нужном виде ... без лишних телодвижений ...
мне теперь все выходные будет чем заняться  :D   ... буду кормить эту софтину... нужными цифрами
и вам желаю удачных выходных... ещё раз спасибо Sanja !!
Изменено: JeyCi - 22.03.2014 15:52:35
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Рад что помог!
Согласие есть продукт при полном непротивлении сторон
 
Цитата
JeyCi пишет:
и тикеры др появятся ещё - тоже допишу...
с этим проблем тоже не возникло... добавила ещё Or .Value = ... всё считывается как положено... и всё-таки очень хочется найти ещё один ответ на один нескромный вопрос...
Код
For Each cl In ThisWorkbook.Worksheets("LOAD").Range("T1:T100")

как задать лист НЕ по имени, а попросить макрос обращаться к Текущему листу (ThisWorksheet) ?? попробовала - выкинул пустой файл... попробовала ещё

Код
Dim shName As String
и в строке выше вместо имени вставила ThisWorkbook.Worksheets(shName), но не так всё просто оказалось...
а надо бы просмотреть и свои архивные цифры и на др листах... может можно как-нибудь обращаться к текущему листу из этого макроса? ...  чтобы жизнь стала ещё ярче  :)
Изменено: JeyCi - 25.03.2014 10:57:45
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
JeyCi пишет:
как задать лист НЕ по имени, а попросить макрос обращаться к Текущему листу
activeworksheet

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Activesheet
 
Код
For Each cl In ThisWorkbook.ActiveWorksheet.Range("T1:T100")
да вот тоже пустой файл выкидывает от такого слова и даже без имени (просто .txt)
Изменено: JeyCi - 25.03.2014 18:11:58
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Юрий М, Activesheet - то что надо!... господа, вашей литературной грамотности нет границ в этом языке... thanks
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Прогоните этот код по F8:
Код
Sub Test()
Dim cl As Range
    For Each cl In ActiveSheet.Range("T1:T100")
        cl.Select
    Next
End Sub
 
Будут выделяться ячейки в диапазоне.
 
Прошу прощения, вместо ThisWorkbook я хотел написать ActiveWorkbook, но дал сбой интерпретатор между мозгом и пальцами рук. Извините.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Цитата
JayBhagavan пишет: но дал сбой интерпретатор между мозгом и пальцами рук. Извините.
... очень знакомо... всегда удивляюсь, почему excel'ю такое не может быть знакомо... с ним бы было намного легче общаться... ещё раз спасибо, ребята
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
Страницы: 1
Читают тему
Наверх