VBA: Скопировать строки текстового файла F, превышающие заданную длину, в текстовый файл G.

Автор Лес, 08 апреля 2014, 21:36

Лес

Задание: Скопировать строки текстового файла 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
[свернуть]