Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.02.2011, 15:12   #1
deemka777
Пользователь
 
Регистрация: 22.02.2011
Сообщений: 38
Вопрос макрос! с чего начать?!

помогите написать макрос, который бы делал следующее:
столбец A2:A13 выводил в txt(1), и название брало из ячейки A1
и всё это в формате "форматированные текст(разделитель - пробел)"
столбец B2:B13 выводил в txt(второй), и название брало из ячейки B1
столбец C2:C13 выводил в txt(третий тхт), и название брало из ячейки C1
столбец D2:D13 выводил в txt(и четвёртый), и название брало из ячейки D1

после запуска, чтоб сохранялось 4 текстовых файла.

данные за 12 месяцев.

Последний раз редактировалось deemka777; 22.02.2011 в 15:15.
deemka777 вне форума Ответить с цитированием
Старый 22.02.2011, 15:21   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Читаем это:
http://excelvba.ru/code/txt
http://excelvba.ru/code/Range2TXT

и пишем макрос:

Код:
sub test
папка = "C:\Documents and Settings\Admin\Рабочий стол\"
SaveTXTfile папка & [a1] & ".txt", Range2TXT([a2:a13], ""," ")
SaveTXTfile папка & [b1] & ".txt", Range2TXT([b2:b13], ""," ")
SaveTXTfile папка & [c1] & ".txt", Range2TXT([c2:c13], ""," ")
SaveTXTfile папка & [d1] & ".txt", Range2TXT([d2:d13], ""," ")
end sub

Function SaveTXTfile(ByVal filename As String, ByVal txt As String) As Boolean
    On Error Resume Next: Err.Clear
    Set fso = CreateObject("scripting.filesystemobject")
    Set ts = fso.CreateTextFile(filename, True)
    ts.Write txt: ts.Close
    SaveTXTfile = Err = 0
    Set ts = Nothing: Set fso = Nothing
End Function

Function Range2TXT(ByRef ra As Range, Optional ByVal ColumnsSeparator$ = vbTab, _
                   Optional ByVal RowsSeparator$ = vbNewLine) As String
    If ra.Cells.Count = 1 Then Range2TXT = ra.Value & RowsSeparator$: Exit Function
    If ra.Areas.Count > 1 Then
        Dim ar As Range
        For Each ar In ra.Areas
            Range2TXT = Range2TXT & Range2TXT(ar, ColumnsSeparator$, RowsSeparator$)
        Next ar
        Exit Function
    End If
    arr = ra.Value
    For i = LBound(arr, 1) To UBound(arr, 1)
        txt = "": For j = LBound(arr, 2) To UBound(arr, 2): txt = txt & ColumnsSeparator$ & arr(i, j): Next j
        Range2TXT = Range2TXT & Mid(txt, Len(ColumnsSeparator$) + 1) & RowsSeparator$
    Next i
End Function
EducatedFool вне форума Ответить с цитированием
Старый 22.02.2011, 15:50   #3
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
Sub ToTxt()
  For c = 1 To 4
    Open Cells(1, c) For Output As #1
    For r = 2 To 13
      Print #1, Cells(r, c)
    Next
    Close #1
  Next
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 22.02.2011, 16:29   #4
deemka777
Пользователь
 
Регистрация: 22.02.2011
Сообщений: 38
По умолчанию

спасибо, и спасибо что так быстро!
у меня только ещё один нюанс, по поводу отображения в txt.
данные все в строчку получились. наверное я не тот формат указал?(т.е. txt но с другим параметром)
т.е. в txt хотел видеть приблизительно так.
Код:
    12
    89
    67
...
  240

Последний раз редактировалось deemka777; 22.02.2011 в 16:41.
deemka777 вне форума Ответить с цитированием
Старый 22.02.2011, 17:15   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

в строках типа этой внесите изменения:
SaveTXTfile папка & [a1] & ".txt", Range2TXT([a2:a13])

уберите всё после адреса диапазона (и до скобки)

PS: сами же просили разделитель "пробел" - а сейчас без пробелов просите)
EducatedFool вне форума Ответить с цитированием
Старый 22.02.2011, 17:16   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

что-то мне не интересно проверять, то что я написал. как оказалось - и Вам то же. на сколько я понимаю, все именно так и должно получиться, каждое значение в новой строке.
успехов!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 22.02.2011, 17:30   #7
deemka777
Пользователь
 
Регистрация: 22.02.2011
Сообщений: 38
По умолчанию

IgorGO, если бы я ещё и понимал.

EducatedFool, спасибо ещё раз.
я почему так написал, если эксель сохранить как, и выбрать "форматированные текст(разделитель - пробел)" то получится то что мне надо. но только он сохранит в формате .prn, а если переименовать в txt, я получаю то что мне надо.

п.с. в итоге немного не то, чего я добивался.
это реально так сделать?

Код:
      12
      89
      67
...
    240
как в коде, с отступом от левой стороны, но так что бы ровно по правой.
deemka777 вне форума Ответить с цитированием
Старый 22.02.2011, 17:43   #8
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
если эксель сохранить как, и выбрать "форматированные текст(разделитель - пробел)" то получится то что мне надо
ну так запишите макрорекордером код сохранения в prn
и покажите, что получилось

а мы этот код дополним переименованием в txt

Цитата:
это реально так сделать?
всё реально
просто вы сразу не сказали, что надо добавлять пробелы

сами подумайте, откуда могут быть разделители, если числа берутся из ОДНОГО столбца...

или они у вас в ячейках так и забиты, с пробелами?

да и зачем вообще это надо - добавлять перед числами пробел?
EducatedFool вне форума Ответить с цитированием
Старый 22.02.2011, 17:47   #9
deemka777
Пользователь
 
Регистрация: 22.02.2011
Сообщений: 38
По умолчанию

не знаю, правельно ли я сделал

Код:
Sub Макрос1()
'
' Макрос1 Макрос
' Макрос записан 22.02.2011 (Dmitriy)
'

'
    ChDir "D:\"
    ActiveWorkbook.SaveAs filename:="D:\Лист Microsoft Excel.prn", FileFormat:= _
        xlTextPrinter, CreateBackup:=False
End Sub
deemka777 вне форума Ответить с цитированием
Старый 22.02.2011, 17:51   #10
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Игорь, это надо для красоты...)))
проверил, работает... как и предполагалось
вот так с лидирующими пробелами:
Код:
Sub ToTxt()
  For c = 1 To 4
    Open Cells(1, c) For Output As #1
    For r = 2 To 13
      Print #1, Format(Cells(r, c), "@@@@@")
    Next
    Close #1
  Next
End Sub
Вложения
Тип файла: rar Книга585.rar (12.9 Кб, 8 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С чего начать? fesked Qt и кроссплатформенное программирование С/С++ 4 16.06.2010 10:05
С чего начать? jekos Свободное общение 2 08.04.2010 13:52
С чего начать? ProgramerBeatz Помощь студентам 5 31.05.2009 18:54
незнаю с чего начать... а начать очень нужно ОСЯНЯ Помощь студентам 2 26.11.2008 20:08