Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
24.09.2022, 20:27:42

Войти
На форуме добавлена возможность подписки на RSS-ленты любого раздела форума. Подписаться можно, нажав на иконку RSS , расположенную левее наименования раздела.
32 837 Сообщений в 5 348 Тем от 6 475 Пользователей
Последний пользователь: lovelywill1
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Вопросы по Excel и VBA
| | |-+  Редактирование текстового документа при помощи VBA
Страниц: [1]   Вниз
Печать
Автор Тема: Редактирование текстового документа при помощи VBA  (Прочитано 8333 раз)
0 Пользователей и 1 Гость смотрят эту тему.
aleksi77
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 3


Просмотр профиля
« : 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


Это работает если просто вписывать цифры, но у меня последние ячейки, которые нужно копировать, это формулы "сцепить" и уже работает не так как нужно....
Не исключаю простейшей ошибки. Не принципиально исправление именно этих методов, может есть другие средства для реализации задачи, главное что бы работало.
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +481/-0
Офлайн Офлайн

Сообщений: 5 697



Просмотр профиля WWW
« Ответ #1 : 06.09.2015, 18:48:33 »

Используйте fso.OpenTextFile - там есть возможность добавлять в конец файла данные.

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

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
aleksi77
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 3


Просмотр профиля
« Ответ #2 : 06.09.2015, 20:38:33 »

Используйте fso.OpenTextFile - там есть возможность добавлять в конец файла данные.

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



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



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

Репутация: +481/-0
Офлайн Офлайн

Сообщений: 5 697



Просмотр профиля WWW
« Ответ #3 : 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
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
aleksi77
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 3


Просмотр профиля
« Ответ #4 : 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 (по умолчанию).
***********






« Последнее редактирование: 07.09.2015, 23:43:58 от vikttur » Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +481/-0
Офлайн Офлайн

Сообщений: 5 697



Просмотр профиля WWW
« Ответ #5 : 07.09.2015, 22:43:17 »

По хорошему новую тему надо создавать. Почитайте про метод application.OnTime
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Страниц: [1]   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru