VBA: копировать строки из текстового файла в документ Word - PullRequest
0 голосов
/ 23 мая 2011

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

У меня есть несколько текстовых файлов, которые являются архивами учетных записей;каждый файл содержит не менее 30 тыс. строк и сотни, если не тысячи учетных записей в каждом.В первой строке документа указан номер учетной записи, и каждая учетная запись разделена уникальной текстовой строкой.

Цель состоит в том, чтобы создать макрос, который просматривает текстовый файл, находит номер учетной записи и затем копируетвсе строки под ним, пока он не достигнет уникальной разделительной строки, и вставьте их в активный текстовый документ для просмотра.

Не думаю, что получу конкретный ответ на такой смутный вопрос,но любые указатели, которые могут быть предложены, будут оценены.

1 Ответ

1 голос
/ 30 мая 2011

вот быстрый и грязный пример, иллюстрирующий принципы .... пусть текстовый файл будет называться «accounts.txt» со следующим содержанием:

Account 1
item 1
item 2
item 3
=========
Account 2
item 4
item 5
=========
Account 3
item 6
item 7
=========

Теперь давайте рассмотрим некоторые очень простые VBA.код, использующий Open As и Line Input и конструкцию цикла ....

Sub GetAccountFromTextFile(FileName As String, Accnt As String)
Dim MyLine As String, State As String

    Open FileName For Input As #1
    State = "Searching"               ' we could make this much simpler but 
                                      ' want to illustrate the different stati
                                      ' the loop is reaching

    Do While Not (EOF(1) Or State = "End")

        Line Input #1, MyLine         ' read next line from text file

                                      ' now process as function of
                                      ' content and current state

        If State = "Reading" And MyLine = "=========" Then
            State = "End"

        ElseIf MyLine = "Account " & Accnt Then
            Selection.InsertAfter "Account " & Accnt & vbCrLf
            State = "Reading"

        ElseIf State = "Reading" Then
            Selection.InsertAfter MyLine & vbCrLf
        End If

    Loop
    Close #1

End Sub

вы вызываете это с помощью другой подпрограммы

Sub test()
    GetAccountFromTextFile "C:\Documents and Settings\MySelf\Desktop\accounts.txt", 1
    GetAccountFromTextFile "C:\Documents and Settings\MySelf\Desktop\accounts.txt", 3
    GetAccountFromTextFile "C:\Documents and Settings\MySelf\Desktop\accounts.txt", 2
End Sub

Запуск теста () из любой точкиWord Doc, и в документ будет вставлено следующее:

Account 1
item 1
item 2
item 3
Account 3
item 6
item 7
Account 2
item 4
item 5

Теперь вы можете проявить большую изобретательность в своей основной подпрограмме (возможно, в диалоговой форме), как узнать имя файла и номер счета перед вами.Вы можете позвонить получателю счета, и вам нужно будет изменить условия поиска номера счета и схемы разделения в получателе.Не очень изощренно, но должно быть достаточно, чтобы вы начали.

Удачи MikeD

...