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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.08.2010, 10:28   #1
leroy87
 
Регистрация: 20.08.2010
Сообщений: 6
По умолчанию Экспорт в последнюю строчку файла .txt

Проблема такая. Есть файл txt, в нем лежит текст. Нужно экспортировать данные из ячейки экселя, чтобы они записались под этим текстом, то есть в последнюю пустую строчку. Это еще не все В экселе есть индикатор, (там в ячейке -1,0,1), и нужно чтобы процесс дописывания был после изменения этого индикатора (при изменении индикатора изменяется текст дописывания). Или последнее можно заменить - при изменении текста в ячейки, чтобы этот текст дописывался в txt файл.

Из моих идей по реализации: Копировать данные из txt в эксель в одну ячейку (как это кстати? я научился копировать по строчкам), там совместить с текстом, который надо дописать в файл, потом это все пиисать в txt файл. Это только идея....
leroy87 вне форума Ответить с цитированием
Старый 20.08.2010, 11:04   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Пример кода vbs, можно использовать в макросе.
Код:
     ' FSO Constants
   Const ForReading   = 1
   Const ForAppending   = 8
   Const TristateUseDefault= -2
   
   ' Variables
   Dim objFSO, objTS, objfile, sFS, s

   ' Instantiate the object
   Set objFSO = CreateObject("Scripting.FileSystemObject")

   ' open the text file read only
   Set objTS = objFSO.OpenTextFile("C:\Temp\in.txt", ForReading, False, TristateUseDefault)
   
   Do While objTS.AtEndOfStream <> True
      s = CStr(objTS.ReadLine())
      s = s & Chr(64) '"@"
      sFS = sFS & s & vbCrLf
   Loop
   
   ' Close the file after we read it in.
   objTS.Close
   Set objTS = Nothing
   
   ' We now open the file to write it out
   If objFSO.FileExists("c:\Temp\out@.txt") Then
      Set objTS = objFSO.OpenTextFile("C:\Temp\out@.txt", ForAppending) 'открываем итоговый файл для добавления записей
   Else
      Set objfile = objFSO.CreateTextFile("C:\Temp\out@.txt")
      Set objfile = Nothing
      Set objTS = objFSO.OpenTextFile("C:\Temp\out@.txt", ForAppending)
   End if
   objTS.Write sFS
   objTS.Close
   Set objTS = Nothing
   Set objFSO = Nothing
В принципе, тут есть всё для Вашей задачи по добавлению в файл, только уберите лишнее.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 20.08.2010, 11:56   #3
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Из описания задачи ничего не понял.
Где примеры файлов?

Функции для чтения\записи из текстовых файлов можно найти здесь: http://excelvba.ru/code/txt
Для дописывания прдназначена функция AddIntoTXTfile
EducatedFool вне форума Ответить с цитированием
Старый 20.08.2010, 11:57   #4
leroy87
 
Регистрация: 20.08.2010
Сообщений: 6
По умолчанию

Отлично, осталось только понять, как производить эту операцию при условии

Если буду писать постоянно, то он разбухнет очень сильно
leroy87 вне форума Ответить с цитированием
Старый 20.08.2010, 12:03   #5
leroy87
 
Регистрация: 20.08.2010
Сообщений: 6
По умолчанию

Примеры файлов:
Например у нас в txt файле написано:
111
222
333

А в ячейке экселя например в B4 стоит: 444
Макрос срабатывает так, что если B4 изменить на :555 (срабатывает только на изменение).
То в файл бы дописывалась эта 555 и получалось:
111
222
333
555

Пытался объяснить как можно проще
leroy87 вне форума Ответить с цитированием
Старый 20.08.2010, 12:09   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Я правильно понял, что ЛЮБУЮ изменённую ячейку надо дописывать в текстовый файл?
Или это верно только для ячеек какого-то выбранного диапазона?
Дописывать ли значение, если в TXT-файле уже есть такая строка?

Где на компе макрос должен искать текстовый файл? Как этот файл называется?

Макрос-то из двух строк, если использовать функцию AddIntoTXTfile
Но получите вы его, когда опишите все нюансы - что и как должно работать.
EducatedFool вне форума Ответить с цитированием
Старый 20.08.2010, 12:13   #7
leroy87
 
Регистрация: 20.08.2010
Сообщений: 6
По умолчанию

Нет, только определенную ячейку (в нашел случае B4).
Нет, не дописывать. (хотя в моём случае не так существенно, но лучше не дописывать).
Файл, допустим: E:\МойФайл.txt
leroy87 вне форума Ответить с цитированием
Старый 23.08.2010, 13:12   #8
leroy87
 
Регистрация: 20.08.2010
Сообщений: 6
По умолчанию

Получается такое:

Dim FSO, TS
Sub Экспорт()
AddIntoTXTfile "E:\МойФайл.txt", [b4] ' сохраняем в текстовый файл содержимое ячейки B4
След = Now + TimeValue("00:01:00")
Application.OnTime След, "Экспорт"
End Sub

Function AddIntoTXTfile(ByVal filename As String, ByVal txt As String) As Boolean
On Error Resume Next: Err.Clear
Set FSO = CreateObject("scripting.filesystemo bject")
Set TS = FSO.OpenTextFile(filename, 8, True): TS.Write txt: TS.Close
Set TS = Nothing: Set FSO = Nothing
AddIntoTXTfile = Err = 0
End Function


Но проблема в том, что AddIntoTXTfile все пишет в одну строку, а надо чтобы в нову строчку записывало.

Как я понимаю нужно кудато впихнуть

Do While ts.AtEndOfStream <> True
s = CStr(ts.ReadLine())
sFS = sFS & s & vbCrLf
Loop

И писать уже sFS. Но вот куда...
leroy87 вне форума Ответить с цитированием
Старый 23.08.2010, 13:41   #9
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Попробуйте
Код:
AddIntoTXTfile "E:\МойФайл.txt", [b4].value & vbnewline
или
Код:
AddIntoTXTfile "E:\МойФайл.txt", [b4].value & vbCrLf
Да, или в функции заменить
TS.Write
на
TS.WriteLine
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 23.08.2010 в 13:44.
Hugo121 вне форума Ответить с цитированием
Старый 23.08.2010, 13:59   #10
leroy87
 
Регистрация: 20.08.2010
Сообщений: 6
По умолчанию

Отлично, получилось. Осталось понять как сделать так чтобы не писался текст который уже есть в txt файле
leroy87 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
импорт из txt, работа с массивом данных, экспорт в txt Danara Microsoft Office Excel 4 31.03.2010 00:26
Excel VBA, Экспорт в txt, кодировка файла UTF-16 LE/UCS-2 Little Endian+еще один интересный вопрос Maxximus Microsoft Office Excel 17 04.09.2009 20:03
Удалить последнюю строку из файла Flame_of_Death Помощь студентам 6 21.07.2009 13:48
импорт TXT в XLS(расчет по формулам)-экспорт в XML Zhiltsov Microsoft Office Excel 27 06.07.2009 11:27
Как из пути файла вытянуть его последнюю папку viter.alex Microsoft Office Excel 7 19.01.2009 05:40