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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2010, 09:35   #1
Evroclidon
Пользователь
 
Регистрация: 26.01.2010
Сообщений: 13
По умолчанию Макрос для передачи персанальных данных

Я, студент,по специальности защита информации, пишу диплом, по защите персональных данных в пенсиооном фонде. Для удобстава передачи персональных данных хочу представить макрос, но в програмировании слаб. Вы мне уже помогали, дали этот код:
Sub Create_TXT_Files()
Dim fso As Object, rCell As Range
With CreateObject("Scripting.FileSystemO bject")
For Each rCell In Range(Cells(1, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1))
If rCell <> "" Then Set fso = .CreateTextFile("C:\" & rCell & ".txt", True)
Next rCell
End With
End Sub

Этот код создает txt документы, с названиями из содержимого ячеек столбца "А", пока ячейка не пуста. Помогите пожалуйста усложнить код, так что бы название документа состояла четко из содержимого ячек А,B,С.(в этих ячейках ФИО) в строке, и документы создавались до пустой строки. Плюс, макрос должен закидывать все содержимое строки, в созданный им документ из ячеек "А,В,С,D....n". В результате из эллектронной таблице с пенсионными данными, в которой записаны ФИО в ячейках A,B,C, и с другими данными, после запуска макроса, мы должны получить столько txt документов, с названием ФИО клиента и содережимым из строки присущей клиенту в диапозоне A,B,C...n, сколько таких клиентов у нас вбито в данную таблицу.

Еще нужен второй макрос, который наоборот, из txt документов, переносит все содержимое в эллектронную таблицу.
Evroclidon вне форума Ответить с цитированием
Старый 31.01.2010, 17:27   #2
Pavel55
Форумчанин
 
Регистрация: 21.08.2007
Сообщений: 292
По умолчанию

Я вот тут написал, но через цикл, может кто подскажет, как без цикла сделать? (цикл по столбцам от А до J, комментарии в коде )

Код:
Sub Create_TXT_Files()
    Dim fso As Object, rCell As Range, fsoTextStream As Object, icol As Long
    Dim iArr As String
        
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    For Each rCell In Range(Cells(1, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1))
        If rCell <> "" Then
            Set fsoTextStream = fso.CreateTextFile("C:\Temp\" & rCell & " " & rCell.Offset(, 1) & " " & rCell.Offset(, 2) & ".txt", True)
            
            'кто знает, как сделать без цикла? Чтобы данные в текстовом файле были через точку с запятой
            'типа так:
            'Dim iArr As Variant, rRange As Range
            'Set rRange = Range(Cells(rCell.Row, "A"), Cells(rCell.Row, "J"))
            'iArr = Application.Transpose(Application.Transpose(rRange))
            'тут надо в массиве iArr заменить vbCrLf на точку с запятой
            'типа  iArr = Replace(iArr, vbCrLf, ";")
            'и выводим данные в текстовый файл
            'fsoTextStream.WriteLine Join(iArr)
            
            'через цикл
            iArr = ""
            For icol = 1 To 10 'с первого столбца (А) до 10 (J)
                iArr = iArr & Cells(rCell.Row, icol) & ";"
            Next
            fsoTextStream.WriteLine iArr
            fsoTextStream.Close
        End If
    Next rCell
    MsgBox "Текстовые файлы созданы!", 64, ""
End Sub

Последний раз редактировалось Pavel55; 31.01.2010 в 17:31.
Pavel55 вне форума Ответить с цитированием
Старый 31.01.2010, 20:23   #3
Evroclidon
Пользователь
 
Регистрация: 26.01.2010
Сообщений: 13
По умолчанию

попробую)) спасибо
Evroclidon вне форума Ответить с цитированием
Старый 31.01.2010, 21:08   #4
Evroclidon
Пользователь
 
Регистрация: 26.01.2010
Сообщений: 13
По умолчанию работает))

а может лучше каждую ячейку копировать в новую страку? что бы потом не было затруднений в обратном програмном переводе, из txt в эксель
Evroclidon вне форума Ответить с цитированием
Старый 31.01.2010, 21:14   #5
Evroclidon
Пользователь
 
Регистрация: 26.01.2010
Сообщений: 13
По умолчанию

вот тут внимание обратите,
Set fsoTextStream = fso.CreateTextFile("C:\Temp\" & rCell & " " & rCell.Offset(, 1) & " " & rCell.Offset(, 2) & ".txt", True)
если папки Temp нет, то будет ошибка. поэтому гадо указывать сушествующей адрес.
Evroclidon вне форума Ответить с цитированием
Старый 31.01.2010, 21:26   #6
Pavel55
Форумчанин
 
Регистрация: 21.08.2007
Сообщений: 292
По умолчанию

1) это не лучшая идея копировать каждую ячейку копировать в новую строку

2) про путь сохранения C:\Temp\ - укажите свой путь (я тестировал макрос и у меня файлы сохранялись в C:\Temp)

3) Если вы посмотрите текстовый файл, там каждое значение ячейки отделяется точкой с запятой. В связи с этим вы можете открыть этот текстовый файл в Excel (меню Файл - Открыть...), в открывшемся окошке выбрать "Тип файлов: Текстовые файлы (*.prn, *.txt, *.csv), щёлкните на название файла и нажмите кнопку "Открыть".
У вас откроется окошко "Мастер текстов (импорт) - шаг 1 из 3"
- выберите "с разделителями" и нажмите Далее
откроется "Мастер текстов (импорт) - шаг 2 из 3"
- укажите символ-разделитель "точка с запятой" и нажмите Далее
откроется "Мастер текстов (импорт) - шаг 3 из 3"
- нажмите Готово

Последний раз редактировалось Pavel55; 31.01.2010 в 21:31.
Pavel55 вне форума Ответить с цитированием
Старый 31.01.2010, 22:33   #7
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Цитата:
Сообщение от Pavel55 Посмотреть сообщение
Я вот тут написал, но через цикл, может кто подскажет, как без цикла сделать? (цикл по столбцам от А до J, комментарии в коде )[/CODE]
Оно?
Код:
Sub Create_TXT_Files()
    Dim fso As Object, rCell As Range, fsoTextStream As Object, icol As Long
    Dim iArr
        
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    For Each rCell In Range(Cells(1, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1))
        If rCell <> "" Then
            Set fsoTextStream = fso.CreateTextFile("C:\Temp\" & rCell & " " & rCell.Offset(, 1) & " " & rCell.Offset(, 2) & ".txt", True)

            iArr = Range(Cells(rCell.Row, "A"), Cells(rCell.Row, "J"))
            fsoTextStream.WriteLine Join(Application.Transpose(Application.Transpose(iArr)), ";")
            fsoTextStream.Close
        End If
    Next rCell
    MsgBox "Текстовые файлы созданы!", 64, ""
End Sub
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 31.01.2010, 22:49   #8
Evroclidon
Пользователь
 
Регистрация: 26.01.2010
Сообщений: 13
По умолчанию

Этот проще)) а наоборот, из кучи подобных txt в ексель, как будет?
Evroclidon вне форума Ответить с цитированием
Старый 31.01.2010, 23:03   #9
Evroclidon
Пользователь
 
Регистрация: 26.01.2010
Сообщений: 13
По умолчанию

а на веб мани можно же просто из терминал кинуть?

Последний раз редактировалось Evroclidon; 01.02.2010 в 10:26.
Evroclidon вне форума Ответить с цитированием
Старый 31.01.2010, 23:23   #10
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Цитата:
Сообщение от Evroclidon Посмотреть сообщение
Этот проще)) а наоборот, из кучи подобных txt в ексель, как будет?
Кардинально измениться код. Необходимо отрыть определённые файлы или они заранее неизвестны? Можно выбирать файлы через диалоговое окно или просто записать в массив имена файлов и затем их обрабатывать по очереди.
Записывать данные из .txt-файлов как? Разделитель известен? Записывать новую книгу или уже имеющуюся? Все файлы на один лист?
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос в эксел или PHP обработчик данных для формата .xls panashka Microsoft Office Excel 2 02.11.2009 15:56
Формула или макрос для работы с массивом данных dondavis Microsoft Office Excel 3 21.09.2009 05:14
Как написать макрос для копирования диапазонов данных с приращением Yevgen_pro Microsoft Office Excel 0 09.09.2009 16:12
Кодировка передачи данных в Word Flame_of_Death Общие вопросы Delphi 3 14.07.2009 12:25
сжатие при передачи данных Makarov Работа с сетью в Delphi 5 17.01.2008 21:41