Друзья, первый опыт написания простого макроса для рутинной работы, так что опыта и знаний в этой области почти нет. Зато есть макрос записанный макрорекодером, который внутри обрабатывает мои данные, потом копирует нужные ячейки, нашла код который открывает чистый блокнот и вставляет их, с этим все нормально. Но сохранять приходится в ручную, причем файлов будет много и каждый раз писать уникальное имя файла очень затруднительно. В идеале имя должно копироваться из ячейки или идти по порядку +1. Буду очень очень благодарна! Вот что есть: [vba]
Друзья, первый опыт написания простого макроса для рутинной работы, так что опыта и знаний в этой области почти нет. Зато есть макрос записанный макрорекодером, который внутри обрабатывает мои данные, потом копирует нужные ячейки, нашла код который открывает чистый блокнот и вставляет их, с этим все нормально. Но сохранять приходится в ручную, причем файлов будет много и каждый раз писать уникальное имя файла очень затруднительно. В идеале имя должно копироваться из ячейки или идти по порядку +1. Буду очень очень благодарна! Вот что есть: [vba]
1. Прочитать правила форума 2. Когда правила выполнены - можно начинать решать задачу. До этого могу сказать только одно - никакой блокнот отрывать не надо, можно сохранить часть данных в текст несколькими другими, более правильными/простыми способами. Да хоть скопировать данные в новый лист и сохранить его как текст - не технично, зато всё можно записать рекордером, и имя изменить тоже будет видно где.
1. Прочитать правила форума 2. Когда правила выполнены - можно начинать решать задачу. До этого могу сказать только одно - никакой блокнот отрывать не надо, можно сохранить часть данных в текст несколькими другими, более правильными/простыми способами. Да хоть скопировать данные в новый лист и сохранить его как текст - не технично, зато всё можно записать рекордером, и имя изменить тоже будет видно где.Hugo
Hugo, Правила прочитала) Думала, есть строчка которую все знают, что бы задать имя, поэтому файл не прикрепила. Теперь добавила пример файла уменьшенный до 20 строк. Там же мои попытки записать последовательность с вариантом сохранения документа сразу в txt с табуляцией, только у меня пытается файл экселя то же стать блокнотом. И по-прежнему не ясно как задать имя для блокнота.
Hugo, Правила прочитала) Думала, есть строчка которую все знают, что бы задать имя, поэтому файл не прикрепила. Теперь добавила пример файла уменьшенный до 20 строк. Там же мои попытки записать последовательность с вариантом сохранения документа сразу в txt с табуляцией, только у меня пытается файл экселя то же стать блокнотом. И по-прежнему не ясно как задать имя для блокнота.Olesyas
' Range("B2:B3").Select ' Зачем? если в следующей строке выделяется другой диапазон Selection.End(xlDown).Select Selection.Copy ' Selection.End(xlUp).Select ' Зачем? если в следующей строке выделяется другой диапазон Range("B2").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.AutoFill Destination:=Range("B2:B500000"), Type:=xlFillSeries Range("B2:B500000").Select ' Range("H1").Select ' Зачем? Application.CutCopyMode = False
' не выделять ни копировать 'Range("J2").Select 'Range(Selection, Selection.End(xlDown)).Select 'Selection.Copy
m = Range("J2").Resize(Cells(Rows.Count, 10).End(xlUp).Row).Value nam = m(1, 1) ' имя по первой ячейке Open ActiveWorkbook.Path & "\" & nam & ".txt" For Output As 1 For r = 1 To UBound(m) Print #1, m(r, 1) Next r Close
[/vba]
[vba]
Код
' Range("B2:B3").Select ' Зачем? если в следующей строке выделяется другой диапазон Selection.End(xlDown).Select Selection.Copy ' Selection.End(xlUp).Select ' Зачем? если в следующей строке выделяется другой диапазон Range("B2").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.AutoFill Destination:=Range("B2:B500000"), Type:=xlFillSeries Range("B2:B500000").Select ' Range("H1").Select ' Зачем? Application.CutCopyMode = False
' не выделять ни копировать 'Range("J2").Select 'Range(Selection, Selection.End(xlDown)).Select 'Selection.Copy
m = Range("J2").Resize(Cells(Rows.Count, 10).End(xlUp).Row).Value nam = m(1, 1) ' имя по первой ячейке Open ActiveWorkbook.Path & "\" & nam & ".txt" For Output As 1 For r = 1 To UBound(m) Print #1, m(r, 1) Next r Close
alex77755, спасибо за ответ. По поводу первых строк поясню идею. Нужно скопировать самую нижнюю ячейку в столбце B, затем эти данные вставить наверх, автозаполнить по порядку. В результате получаются ссылки, которые и нужно сохранить в txt. Далее повторить много раз. Добавила пример файла на 20 ячеек в начальное сообщение.
alex77755, спасибо за ответ. По поводу первых строк поясню идею. Нужно скопировать самую нижнюю ячейку в столбце B, затем эти данные вставить наверх, автозаполнить по порядку. В результате получаются ссылки, которые и нужно сохранить в txt. Далее повторить много раз. Добавила пример файла на 20 ячеек в начальное сообщение.Olesyas
это не совместимо!: В имени файлов не должно быть слеш в ячейку "n1" поставил размер партии. формулы, естественно должны быть заполнены на размер партии [vba]
Код
Sub Макрос1() Dim n, k, s, pat k = [n1] ' размер партии n = Cells(Rows.Count, 2).End(xlUp) ' последнее значение во 2 колонке Range("B2") = n ' записяваем значение Range("B2").AutoFill Destination:=Range("B2:B" & k + 1), Type:=xlFillSeries
m = Range("H2").Resize(k).Value nam = Replace(Split(m(1, 1), "//")(1), "/", "_") ' имя по первой ячейке pat = ActiveWorkbook.Path & "\" & nam & ".txt"
For r = 1 To UBound(m) s = IIf(Len(s) = 0, m(r, 1), s & vbCrLf & m(r, 1)) Next r
Open pat For Output As 1 Print #1, s Close End Sub
[/vba]
имя : www.имясайта.ru_раздел_number_0100000000054000003_etpName_fks.txt
Цитата
в идеале имя должно копироваться из ячейки
Цитата
В результате получаются ссылки
это не совместимо!: В имени файлов не должно быть слеш в ячейку "n1" поставил размер партии. формулы, естественно должны быть заполнены на размер партии [vba]
Код
Sub Макрос1() Dim n, k, s, pat k = [n1] ' размер партии n = Cells(Rows.Count, 2).End(xlUp) ' последнее значение во 2 колонке Range("B2") = n ' записяваем значение Range("B2").AutoFill Destination:=Range("B2:B" & k + 1), Type:=xlFillSeries
m = Range("H2").Resize(k).Value nam = Replace(Split(m(1, 1), "//")(1), "/", "_") ' имя по первой ячейке pat = ActiveWorkbook.Path & "\" & nam & ".txt"
For r = 1 To UBound(m) s = IIf(Len(s) = 0, m(r, 1), s & vbCrLf & m(r, 1)) Next r
Open pat For Output As 1 Print #1, s Close End Sub
[/vba]
имя : www.имясайта.ru_раздел_number_0100000000054000003_etpName_fks.txtalex77755
Могу помочь в VB6, VBA Alex77755@mail.ru
Сообщение отредактировал alex77755 - Воскресенье, 10.12.2017, 17:16
alex77755, Спасибо большое! Сижу разбираюсь с каждой строчкой, голова кругом. Пока не работает. Но я разберусь) С именем проще - можно взять только нижнюю цифру из второго столбца в качестве имени. Там же нет слеша. Когда разберусь с тем, кто про что и под себя адаптирую, напишу!
alex77755, Спасибо большое! Сижу разбираюсь с каждой строчкой, голова кругом. Пока не работает. Но я разберусь) С именем проще - можно взять только нижнюю цифру из второго столбца в качестве имени. Там же нет слеша. Когда разберусь с тем, кто про что и под себя адаптирую, напишу!Olesyas