Форум по VBA и MS Office

VBA, Excel => VBA, макросы в Excel => Тема начата: moland от 19 октября 2014, 20:47

Название: Создание и заполнение TXT файла
Отправлено: moland от 19 октября 2014, 20:47
Private Sub UserForm_Initialize()

Const strFN As String = "C:\1.txt" 
   
    Open strFN For Output As #1 
    Print #1, 
    Print #1, 
    Print #1, "1" 
    Print #1, "90" 
     
    Close #1 
End sub
Приведенный выше код  создает файл и заносит в первые четыре строки значения. В первые две ничего не вводится (но если там что нибудь записано оно удаляется). Как сделать так чтобы значения "1" и "90" вносились сразу в третью и четвертую строки, а первая и вторая игнорировались. Т.е мне нужно внести значения в конкретные строки файла TXT, а остальные не трогать.
Название: Re: Создание и заполнение TXT файла
Отправлено: Администратор от 19 октября 2014, 20:58
moland, могу предложить такой вариант. Создаёте новый пустой текстовый файл. Двигаетесь по старому текстовому файлу. Нужные строки переносите из старого файла в новый файл. В тех местах, где ненужные строки, вставляете свои данные.
Подходит Вам такой вариант? Если подходит, то знаете, как это сделать?
Название: Re: Создание и заполнение TXT файла
Отправлено: moland от 20 октября 2014, 09:52
1. Такой вариант подходит. Можете написать, как это сделать?
2. Но мне интересно, может ли VBA с текстовым файлом выполнить следующие действия: открыть его, прочитать первую строку, прочитать вторую строку, записать значение в третью строку, записать значение в четвёртую строку, закрыть его.
При этом не создавая дополнительных файлов.
Название: Re: Создание и заполнение TXT файла
Отправлено: Администратор от 20 октября 2014, 11:05
Пункт 1

Код:

Sub Макрос1()

    Const strFN_Source As String = "C:\Users\User\Desktop\Источник.txt"
    Const strFN_Res As String = "C:\Users\User\Desktop\Результат.txt"
   
    Dim strLine As String
    Dim i As Long
   
   
    ' Открытие файла-источника.
    Open strFN_Source For Input As #1
    ' Создание файла-результата.
    Open strFN_Res For Output As #2
       
    ' В цикле двигаемся по строкам текстового файла.
    Do While VBA.EOF(1) = False
       
        ' С помощью переменной i определяем, на какой строке мы находимся.
        i = i + 1
       
        ' Смотрим, на какой строке мы находимся, чтобы сделать нужное действие.
        ' Если мы находимся на второй строке, то мы вставим свои данные,
            ' а не будем копировать данные из текстового файла.
        If i = 2 Then
           
            ' Запись в файл-результат нужных данных.
            Print #2, "нужные данные"
            ' Делаем бессмысленное действие, чтобы курсор перешёл в следующую строку,
                ' и чтобы строка не была взята из файла-источника.
            Line Input #1, strLine

        Else
           
            ' Копирование строки из файла-источника в переменную strLine.
            Line Input #1, strLine
            ' Запись данных из переменной strLine в файл-результат.
            Print #2, strLine
           
        End If
       
    Loop
       
    Close #1
    Close #2

End Sub
[свернуть]


Пункт 2

Можно ли записать данные в нужную строку без использования дополнительного текстового файла - я не знаю. В последовательном доступе - это точно нельзя сделать. Можно попробовать произвольный или бинарный доступ. Но я такое ни разу не делал.
Название: Re: Создание и заполнение TXT файла
Отправлено: moland от 20 октября 2014, 12:28
Спасибо.