Задание: Скопировать строки текстового файла F, превышающие заданную длину в текстовый файл G.
Подготовка к запуску макроса:
- в макросе нужно указать в константах "strFileNameOut" и "strFileNameIn" свои данные;
- файл "out.txt" должен у Вас быть создан и в нём должны быть какие-нибудь данные, чтобы макросу было с чем работать;
- файл "in.txt" можно не создавать, он сам создатся командой "Open".
Макрос
Sub Procedure_1()
'В константах нужно указать полные имена текстовых файлов
'(полное имя - это путь + имя файла).
Const strFileNameOut As String = "C:\Users\User\Desktop\out.txt"
Const strFileNameIn As String = "C:\Users\User\Desktop\in.txt"
Dim strTextFromOut As String
Dim lngLength As Long
'Открытие файла "out.txt", чтобы взять из него данные.
'В VBA есть нестыковка с командой "Open".
'Если перевести строку ниже, то получается, что мы открываем для ввода
'(Input с английского "ввод"), но на самом деле файл открывается для взятие
'из него данных. Не знаю, почему такая нестыковка.
'#1 - это имя, которое назначается файлу. С помощью этого имени
'макрос будет обращаться к файлу.
Open strFileNameOut For Input As #1
'Открытие файла "in.txt", чтобы поместить в него данные.
'Обратите внимание, что нестыковка со словом "Output".
'Мы открываем для ввода, а не для вывода.
Open strFileNameIn For Output As #2
'Пользователь указывает, сколько должно быть символов, чтобы
'макрос взял строку из одного файла в другой.
lngLength = InputBox("Введите, сколько символов макросу нужно учитывать:")
'Двигаемся по файлу "out.txt" от первой строки до последней.
Do While EOF(1) = False
'Взятие строки из файла "out.txt" в переменную "strTextFromOut".
'Обратите внимание, что опять нестыковка с термином "Input":
'мы берём, а не вписываем.
Line Input #1, strTextFromOut
'Анализируем взятую строку.
'Если в строке больше символов.
If Len(strTextFromOut) > lngLength Then
'Запись в файл "in.txt".
Print #2, strTextFromOut
End If
Loop
'Закрытие файлов.
'Файлы автоматически сохранятся - специально не нужно писать
'никаких команд.
Close #1
Close #2
End Sub