Страницы: 1
RSS
Выдернуть текст из блоконта
 
Помогите в решении.  
23.12.08 10111000400001028001 04 93 01028 0.00 25,000.00 14014за обучение от Даукаева Марата    
 
Задача в том, чтобы выдернуть из блокнота 3 позиции строки и вставить их в эксель в ячейки А1,В1,С1.  пример:  
А1 = 23.12.08  
В1 = 25,000.00  
С1 = Даукаева Марата  
 
P.S. Строк много и при запуске макроса необходимо пройтись по всему блокноту  
Спасибо
 
Мне кажется нужно открыть этот текстовый файл из Excel (меню Файл - Открыть), сохранить открытый файл в формате Excel, ну, а дальше уже обрабатывать полученный файл функциями и макросами уже в самом Excel. Но нужен образец с 5-10 строками
 
Запишите код при помощи макрорекордера:  
 
1) открывате при помощи Excel текстовый файл  
2) используете мастер импорта текста  
3) удаляете лишние столбцы
 
Sub Macros()  
'  
' Macros Макрос  
' Macros  
'  
 
'  
   Workbooks.OpenText Filename:= _  
       "C:\Documents and Settings\Ксения Владимировна\Мои документы\1.txt", Origin:= _  
       1251, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _  
       ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False, Comma:=False, _  
       Space:=True, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3 _  
       , 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), Array(10, _  
       1), Array(11, 1), Array(12, 1)), TrailingMinusNumbers:=True  
   Columns("A:A").ColumnWidth = 18.86  
   Columns("B:F").Select  
   Selection.Delete Shift:=xlToLeft  
   Columns("C:E").Select  
   Selection.Delete Shift:=xlToLeft  
   Range("E1").Select  
   ActiveCell.FormulaR1C1 = "=RC[-2]&RC[-1]"
   Range("E1").Select  
   Selection.Copy  
   Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _  
       :=False, Transpose:=False  
   Columns("C:D").Select  
   Range("D1").Activate  
   Application.CutCopyMode = False  
   Selection.Delete Shift:=xlToLeft  
   Selection.ColumnWidth = 19.71  
   Range("C1").Select  
End Sub
 
Пользовательская функция    
 
Function Substring(Txt As String, Delimiter As String, n As Integer) As String  
 ' функция разбиения строк на отдельные слова  
  Dim x As Variant  
     x = Split(Txt, Delimiter)  
     If n > 0 And n - 1 <= UBound(x) Then  
       Substring = x(n - 1)  
     Else  
       Substring = ""  
     End If  
End Function
 
{quote}{login=Степа}{date=10.10.2009 06:21}{thema=Выдернуть текст из блоконта}{post}Помогите в решении.  
23.12.08 10111000400001028001 04 93 01028 0.00 25,000.00 14014за обучение от Даукаева Марата    
 
Задача в том, чтобы выдернуть из блокнота 3 позиции строки и вставить их в эксель в ячейки А1,В1,С1.  пример:  
А1 = 23.12.08  
В1 = 25,000.00  
С1 = Даукаева Марата  
 
P.S. Строк много и при запуске макроса необходимо пройтись по всему блокноту  
Спасибо{/post}{/quote}  
см.вложение
 
Здравствуйте.  
Выдернуть текст из блокнота - более или менее понятно.  
А выдернуть текст из памяти - сложно?  
Спасибо.
 
{quote}{login=001}{date=13.10.2009 12:05}{thema=}{post}Здравствуйте.  
Выдернуть текст из блокнота - более или менее понятно.  
А выдернуть текст из памяти - сложно?  
Спасибо.{/post}{/quote}  
см.вложение
 
В последнем макросе текст уже зашит внутрь. А как быть с вопросом "...P.S. Строк много и при запуске макроса необходимо пройтись по всему блокноту".  
Я так понял просьбу автора скопированные строчки должны располагаться одна под другой (новый файл может иметь много строк).  
Спасибо.
 
{quote}{login=001}{date=13.10.2009 12:59}{thema=}{post}В последнем макросе текст уже зашит внутрь. А как быть с вопросом "...P.S. Строк много и при запуске макроса необходимо пройтись по всему блокноту".  
Я так понял просьбу автора скопированные строчки должны располагаться одна под другой (новый файл может иметь много строк).  
Спасибо.{/post}{/quote}  
см.вложение
 
Отлично, макрос работает.  
Хорошо бы было доработать макрос со вставкой строк из памяти. Чтобы вставленные из памяти строки располагались одна под другой.  
Спасибо.
 
{quote}{login=001}{date=14.10.2009 09:45}{thema=}{post}Отлично, макрос работает.  
Хорошо бы было доработать макрос со вставкой строк из памяти. Чтобы вставленные из памяти строки располагались одна под другой.  
Спасибо.{/post}{/quote}  
1. Что Вы имеете ввиду "вставкой строк из памяти"?  
2. Без примера разобраться сложно!    
3. Есть только одна строка из блокнота, по одной строке и было.  
Для более правильной работы процедуры нужен:    
- пример из нескольких строк блокнота;  
- пример xls-файла, где указано в каком виде хотите видеть информацию;  
- по какому признаку обрабатывать информацию в блокноте? Было сделано по разделителю - пробел, т.е. выбирались элементы 1, 7 и 11+12.
 
Допустим есть несколько документов в одинаковом формате. При составлении таблицы есть необходимость копирования текста по одной строке и вставка этих данных в текущую строку таблицы. Поэтому и возникла необходимость копирования строк в память и занесение данных в таблицу.  
Для простоты можно использовать тот же текстовый файл (из примера). Выделяем первую строку, копируем  ее и вставляем ее в текущую строку таблицы. Далее копируем вторую, третью и т.д.(имитация копирования из разных документов).  
Спасибо.
 
{quote}{login=001}{date=14.10.2009 12:19}{thema=}{post}Допустим есть несколько документов в одинаковом формате. При составлении таблицы есть необходимость копирования текста по одной строке и вставка этих данных в текущую строку таблицы. Поэтому и возникла необходимость копирования строк в память и занесение данных в таблицу.  
Для простоты можно использовать тот же текстовый файл (из примера). Выделяем первую строку, копируем  ее и вставляем ее в текущую строку таблицы. Далее копируем вторую, третью и т.д.(имитация копирования из разных документов).  
Спасибо.{/post}{/quote}  
1. Данные в xls-файл добавлять каждый раз в конец базы, т.е. данные будут накапливаться, или каждый раз при обработке всех txt-файлов создавать новый отчёт, т.е. данные удаляются считаваются из txt-файлов и вставляются  в xls-файл ?  
2. Вы хотите обязательно через память или можно обрабатывать txt-файлы и просто вставлять данные в xls-файл?    
3. "Для простоты можно использовать тот же текстовый файл (из примера). Выделяем первую строку, копируем  ее и вставляем ее в текущую строку таблицы" - вытягивать данные или Вы хотите видеть строку?
 
{quote}{login=001}{date=14.10.2009 12:19}{thema=}{post}Допустим есть несколько документов в одинаковом формате. {/post}{/quote}  
Как распознавать документы :    
- по наименованию, по расширению, по шаблону ????  
- или будут находиться в отдельно папке, т.е. задать местонахождение нужной папки и все файлы в этой папке будут обработаны ????  
- или и то и другое ????
 
Данные в xls-файл добавляем каждый раз в конец базы, и желательно с помощью памяти  обрабатываем txt-файлы, и просто вставляем данные в xls-файл.  
И на третий вопрос - выделяем строку, копируем и вставляем ее в текущую строку таблицы - лучше видеть копируемую строку (поскольку копируемые строки могут быть из дазных документов).  
Спасибо.
 
{quote}{login=001}{date=14.10.2009 12:54}{thema=}{post}Данные в xls-файл добавляем каждый раз в конец базы, и желательно с помощью памяти  обрабатываем txt-файлы, и просто вставляем данные в xls-файл.  
И на третий вопрос - выделяем строку, копируем и вставляем ее в текущую строку таблицы - лучше видеть копируемую строку (поскольку копируемые строки могут быть из дазных документов).  
Спасибо.{/post}{/quote}  
 
Данные в xls-файл добавляем каждый раз в конец базы - Учтено  
с помощью памяти - Учтено  
выделяем строку, копируем и вставляем ее в текущую строку таблицы - Учтено
 
Извиняюсь за долгое молчание.  
Последний предложенный макрос у меня почему-то не работает.  
Останавливается на строке: ReDim Preserve a(1 To 2, 1 To UBound(a(), 2) - 1).  
Ошибка Run-time error "9". Subscript out of range.  
Подскажите что не так?  
Спасибо.
 
{quote}{login=001}{date=17.10.2009 08:49}{thema=}{post}Извиняюсь за долгое молчание.  
Последний предложенный макрос у меня почему-то не работает.  
Останавливается на строке: ReDim Preserve a(1 To 2, 1 To UBound(a(), 2) - 1).  
Ошибка Run-time error "9". Subscript out of range.  
Подскажите что не так?  
Спасибо.{/post}{/quote}  
Если ReDim Preserve a(1 To 2, 1 To UBound(a(), 2) + 1) работает без ошибок, то и ReDim Preserve a(1 To 2, 1 To UBound(a(), 2) - 1) должно всё работать.  
Думаю причина в том, что идёт процедура ненаходит нужных файлов.  
Причина: 1. указан не правильный путь к текстовым файлам; 2. нет файлов для обработки.  
Проверьте ещё раз следующее: 1. где находится основная книга, должна быть создана папка TEST; 2. в этот папке идёт просмотр всех файлов, т.е. должен быть хоть один файл.
 
{quote}{login=Виталий}{date=19.10.2009 10:25}{thema=Re: }{post}  
Если ReDim Preserve a(1 To 2, 1 To UBound(a(), 2) + 1) работает без ошибок, то и ReDim Preserve a(1 To 2, 1 To UBound(a(), 2) - 1) должно всё работать.  
{/post}{/quote}Ошибаетесь. Читаем справку:  
Similarly, when you use Preserve, you can change the size of the array only by changing the upper bound; changing the lower bound causes an error.  
 
С Презервом вверх можно вниз - нет.
Bite my shiny metal ass!      
 
{quote}{login=Лузер™}{date=19.10.2009 02:19}{thema=Re: Re: }{post}{quote}{login=Виталий}{date=19.10.2009 10:25}{thema=Re: }{post}  
Если ReDim Preserve a(1 To 2, 1 To UBound(a(), 2) + 1) работает без ошибок, то и ReDim Preserve a(1 To 2, 1 To UBound(a(), 2) - 1) должно всё работать.  
{/post}{/quote}Ошибаетесь. Читаем справку:  
Similarly, when you use Preserve, you can change the size of the array only by changing the upper bound; changing the lower bound causes an error.  
 
С Презервом вверх можно вниз - нет.{/post}{/quote}  
В начале процедуры было объявлено UBound(a(), 2) = 1.  
Поэтому считаю, что в данном случае ReDim Preserve a(1 To 2, 1 To UBound(a(), 2) - 1) выдаёт ошибку потому что UBound(a(), 2) = 1 - 1 = 0.  
Исходя их этого, можно предположить, что или путь не правильный, или нет файлов в указанной папке, или файлы имеют нулевой размер.
 
Виноват, погорячился.  
Да, наверное, получается выражение вида ReDim Preserve a(1 To 0)  
То о чем я привел цитату говорит о следующем  
Dim a()  
ReDim Preserve a(1 To 10)  
ReDim Preserve a(1 To 20) - так можно  
а:  
Dim a()  
ReDim Preserve a(1 To 10)  
ReDim Preserve a(2 To 10) - так нельзя
Bite my shiny metal ass!      
 
{quote}{login=Лузер™}{date=19.10.2009 02:19}{thema=Re: Re: }{post}{quote}{login=Виталий}{date=19.10.2009 10:25}{thema=Re: }{post}  
 
С Презервом вверх можно вниз - нет.{/post}{/quote}  
ReDim Preserve a(1 To 2, 1 To UBound(a(), 2) - 1) использую для того чтобы в массиве небыло пустых строк  
Preserve можно как вверх так и вниз.  см.пример
Страницы: 1
Читают тему
Наверх