Excel это не сложно

Основные форумы => Вопросы по Excel и VBA => Тема начата: aleksi77 от 06.09.2015, 17:58:25



Название: Редактирование текстового документа при помощи VBA
Отправлено: aleksi77 от 06.09.2015, 17:58:25
Приветствую и прошу помочь в вопросе редактирования текстового документа средствами VBA.
В экселе идёт расчёт и на выходе имеем несколько значений, которые нужно добавить в текстовый документ.
Данные в текстовом документе нужны для индикатора терминала мт4 и по этому должны быть расположены в определённом порядке (пример одной строки (03.09.2015;1.15852380597742;1;Aqua;3) (дата;уровень;тип линии;цвет линии;толщина).
На данный момент сделал кнопку, которая создаёт текстовый документ из диапазона, при этом более старые данные удаляются.
Вот код.
Код: (vb)
Sub euro1()
 
    Dim fso As Object
    Dim txt As Object
    Dim cell As Range
     
    Set fso = CreateObject("Scripting.FileSystemObject")
     
    Set txt = fso.CreateTextFile("D:\папа\опц\ind\str.txt", True)
    For Each cell In Range("A2:A20")
        txt.WriteLine cell
    Next
     
    txt.Close
    Set txt = Nothing
    Set fso = Nothing
     
End Sub

 Приходится открывать промежуточный текстовый документ, копировать из него данные и вставлять в рабочий текстовый документ. Вот собственно у меня вопрос, можно сделать так, что бы при нажатии на кнопку данные добавлялись в последнюю пустую строку рабочего текстового документа (редактирование)?

Почитав "хитрости" про поиск последней пустой строки изменил код так, что бы данные добавлялись непосредственно в экселе, а диапазон для текстового документа брался с учётом добавленных.
Выглядит это так.
Код: (vb)
Sub Copy_To_Last_Cell()
    Range("B1:B2").Copy Cells(Rows.Count, 1).End(xlUp).Offset(1)
   
    Dim fso As Object
    Dim txt As Object
    Dim cell As Range
     
    Set fso = CreateObject("Scripting.FileSystemObject")
     
    Set txt = fso.CreateTextFile("D:\папа\опц\ind\primer.txt", True)
    For Each cell In Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
        txt.WriteLine cell
    Next
     
    txt.Close
    Set txt = Nothing
    Set fso = Nothing
   
   

End Sub


Это работает если просто вписывать цифры, но у меня последние ячейки, которые нужно копировать, это формулы "сцепить" и уже работает не так как нужно....
Не исключаю простейшей ошибки. Не принципиально исправление именно этих методов, может есть другие средства для реализации задачи, главное что бы работало.


Название: Re:Редактирование текстового документа при помощи VBA
Отправлено: Дмитрий Щербаков(The_Prist) от 06.09.2015, 18:48:33
Используйте fso.OpenTextFile - там есть возможность добавлять в конец файла данные.

А вообще неплохо бы видеть почему это последняя ячейка неверно определяется. Если в ячейке есть формула - то она должна быть определена.


Название: Re:Редактирование текстового документа при помощи VBA
Отправлено: aleksi77 от 06.09.2015, 20:38:33
Используйте fso.OpenTextFile - там есть возможность добавлять в конец файла данные.

Теперь пишет ошибку.

(http://storage7.static.itmages.ru/i/15/0906/s_1441560248_8906876_7e5bf2cbc4.jpg) (http://itmages.ru/image/view/2970382/7e5bf2cb)

А вообще неплохо бы видеть почему это последняя ячейка неверно определяется. Если в ячейке есть формула - то она должна быть определена.



Я неправильно выразился, это она для меня неправильно определяется. А так всё правильно  формула "сцепить С1;D1" из ячейки В1 копируется в последнюю пустую ячейку столбца А. Соответственно и формула меняется, если копируется в ячейку А3, то и формула будет "сцепить С3;D3", а нужные данные находятся в ячейке В1


Название: Re:Редактирование текстового документа при помощи VBA
Отправлено: Дмитрий Щербаков(The_Prist) от 06.09.2015, 21:21:15
Как бы...Вы бы хоть в поисковике набрали OpenTextFile. У него аргументы-то другие.
Код: (vb)
Set txt = fso.OpenTextFile("D:\папа\опц\ind\str.txt", 8, -1)
For Each cell In Range("A2:A20")
     txt.WriteLine cell.Value
Next


Название: Re:Редактирование текстового документа при помощи VBA
Отправлено: aleksi77 от 07.09.2015, 21:10:22
Спасибо, всё работает! Теперь поиск последней пустой ячейки и копирование диапазона совсем не нужно.

Да, нашёл я аргументы. Может кому то пригодится...
3.24. OpenTextFile
Синтаксис:
OpenTextFile(<Filename>,<Iomode>,<Create>,<Format>)
Назначение: открывает текстовый файл и возвращает объект "TextStream", указывающий на него.
Параметры:
•<Filename> - строка, путь к файлу.
•<Iomode> - необязательный, число. Возможные значения:
◦1 - Открыть файл только для чтения.
◦2 - Открыть файл для записи. Если файл уже существовал, его содержимое теряется.
◦8 - Открыть файл для добавления. Если файл уже существовал, информация будет дописываться в конец файла.

•<Create> - необязательный, булево (число). Создавать файл, если он не существует (True), или нет (False). По умолчанию - False.
•<Format> - необязательный, число. Возможные значения:
◦-2 - Открыть файл в формате, используемом системой по умолчанию.
◦-1 - Открыть файл в формате Unicode.
◦0 - Открыть файл в формате ASCII (по умолчанию).
***********








Название: Re:Редактирование текстового документа при помощи VBA
Отправлено: Дмитрий Щербаков(The_Prist) от 07.09.2015, 22:43:17
По хорошему новую тему надо создавать. Почитайте про метод application.OnTime