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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.08.2012, 10:47   #1
alexsampler
Пользователь
 
Регистрация: 29.03.2011
Сообщений: 86
По умолчанию Правка макроса по обработке txt файла

Добрый день, знатоки Excel-я!
Вчера сделал запрос о помощи в макросе, но ответ так и не получил, наверное слишком много вопросов - решил упростить задачу ...

Excel 2003. Макрос создан макрорекордером и обрабатывает txt файл с балансом. Все вроде бы настроил, но остается проблема съехавших влево подитогов по строкам - это в самом тексте (их нужно вернуть на место) и необходимо добавить столбец с последующей простановкой двух определенных символов по условию.

Макрорекордером пользоваться умею, а дальше пока знаний не хватает.
Помогите, пожалуйста!!!! Все в примере
Вложения
Тип файла: rar Пример 6 (макрос).rar (8.5 Кб, 12 просмотров)
alexsampler вне форума Ответить с цитированием
Старый 30.08.2012, 11:06   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Цитата:
Вчера сделал запрос о помощи в макросе, но ответ так и не получил
Во вложении не хватает текстового файла для импорта.
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 30.08.2012, 11:31   #3
alexsampler
Пользователь
 
Регистрация: 29.03.2011
Сообщений: 86
По умолчанию Правка макроса по обработке txt файла

Понял, исправляюсь.
Архив тот же плюс в нем исхоный файл txt.
Вложения
Тип файла: rar Пример 6 (макрос).rar (18.6 Кб, 13 просмотров)
alexsampler вне форума Ответить с цитированием
Старый 30.08.2012, 12:05   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Думаю, там нужен вообще другой подход.
Но муторно, рутина... Поэтому все молчат

И вообще - я бы из этого текстового файла делал два листа - в одном актив, в другом пассив.
Шапки рисуем кодом, как у Вас уже сделано, а далее читаем построчно файл, смотрим чтоб с позиции например 25 были два символа-числа и с помощью Cdbl(Trim(mid())) наполняем таблицу.
Одновременно для одной таблицы ищем "Итого по активу", для второй "Итого по пассиву" - значит пора подводить черту и со следующей строки будут итоги (хотя это видно и по тому, что в 25/2 числа, а в начале строки пусто).
Если итоги не нужны - тогда вообще просто - смотрим позицию Mid(2,5) - если число, то строку обрабатываем в первую таблицу.
Ну а если Mid(2,12)="П А С С И В", то далее пора второй лист начинать.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 30.08.2012 в 12:26.
Hugo121 вне форума Ответить с цитированием
Старый 30.08.2012, 12:27   #5
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Ловите
Код:
Sub Get_TXT()
        Dim Filename As String
        Filename = Get_Filename
        If Filename = "False" Then Exit Sub
        Dim flag1 As Boolean, flag2 As Boolean, Row As Integer
        Row = 3
        Set objFSO = CreateObject("Scripting.FileSystemObject")
        Set objTextFile = objFSO.OpenTextFile(Filename, 1)
        Application.ScreenUpdating = False
        With ActiveSheet
                Do Until objTextFile.AtEndOfStream
                        strNextLine = objTextFile.ReadLine
                        If InStr(1, strNextLine, "----", vbTextCompare) = 0 Then
                                If flag1 = True And Len(Trim(strNextLine)) > 2 Then
                                        sd = Mid(strNextLine, 1, 7)
                                        If Val(Trim(sd)) > 0 Then
                                                If flag2 Then
                                                        .Cells(Row, 2) = "П"
                                                Else
                                                        .Cells(Row, 2) = "А"
                                                End If
                                        End If
                                        .Cells(Row, 1) = sd
                                        For n = 1 To 12
                                                sd = Mid(strNextLine, 9 + 20 * (n - 1), 19)
                                                .Cells(Row, n + 2) = sd
                                        Next
                                        Row = Row + 1
                                End If
                        End If
                        If InStr(1, strNextLine, "А К Т И В", vbTextCompare) > 0 Then
                                flag1 = True
                        End If
                        If InStr(1, strNextLine, "П А С С И В", vbTextCompare) > 0 Then
                                flag2 = True
                        End If
                Loop
        End With
        Application.ScreenUpdating = True
        Set objTextFile = Nothing
        Set objFSO = Nothing
End Sub
Public Function Get_Filename(Optional Filter As String = "Файлы ,*.", Optional Title As String = "Выбираем файл")
        Dim vntFilename As Variant
        vntFilename = Application.GetOpenFilename(Filter, 1, Title, , False)
        Get_Filename = vntFilename
End Function
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 30.08.2012, 12:42   #6
alexsampler
Пользователь
 
Регистрация: 29.03.2011
Сообщений: 86
По умолчанию

ОК! Если так все сложно, пожалуйста напишите пример как хотябы строку с итогами передвинуть на одну ячейку вправо используя ключевое слово. Может быть я пойму и тогда сам разбирусь. Я вполне обучаемый, просто долго "втыкаю".
Не может быть что бы такую процедуру нужно было описывать огромным кодом.
Что-то я опечален.....
alexsampler вне форума Ответить с цитированием
Старый 30.08.2012, 12:47   #7
alexsampler
Пользователь
 
Регистрация: 29.03.2011
Сообщений: 86
По умолчанию

Ай да doober, ай да ...... молодец!
Спасибо, буду разбираться.
Не сочтите за наглость и тупость если что-то уточнить придется
alexsampler вне форума Ответить с цитированием
Старый 30.08.2012, 12:50   #8
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Шапку doober только забыл присобачить (сорри за каламбур )
И суперски обошёл рутину - что-то я не подумал, что там можно цикл использовать...

Ну для шапки у Вас код есть.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 30.08.2012, 12:56   #9
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Цитата:
Сообщение от alexsampler Посмотреть сообщение
Не сочтите за наглость и тупость если что-то уточнить придется
Буду только после 22 по Москве,тогда и отвечу
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 30.08.2012, 12:57   #10
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Сергей, может для надёжности объявить
Dim sd As Double
Или где-то уйдёт в ошибку (не проверял)?
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Правка EXE файла посредством bin/hex редактора. Вопрос о возможности увеличения длинны строки Вадим Мошев Общие вопросы по программированию, компьютерный форум 7 25.02.2012 00:02
чтение и правка *.txt.string.bin Yungo161 Общие вопросы Delphi 8 24.01.2012 15:09
Запуск макроса при открытии файла ПавелАлександрович Microsoft Office Excel 4 04.03.2011 10:07
Как скопировать текст с файла 1.txt и записать в 2.txt Kasper1 Общие вопросы по Java, Java SE, Kotlin 1 14.12.2010 05:56