Как извлечь/удалить первое слово каждой страницы?

Я сделал рассылку для создания динамических страниц слов с информацией о клиентах.

Затем я сделал (посмотрев в сети) макрос, чтобы разбить файл результата на несколько страниц, каждая из которых была сохранена как один файл.

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

Пример: если у меня есть клиент с именем Stackoverflow, мне нужен файл с именем Facture_Stackoverflow.doc.

Я нигде не нашел, как выделить, извлечь, а затем удалить это первое слово со своей страницы.

Вот мой «макрос разделения», который в настоящее время называет файлы только с увеличенным идентификатором:

Sub DecouperDocument()
    Application.Browser.Target = wdBrowsePage

    For i = 1 To ActiveDocument.BuiltInDocumentProperties("Number of Pages")

        ActiveDocument.Bookmarks("\page").Range.Copy

        Documents.Add
        Selection.Paste

        Selection.TypeBackspace
        ChangeFileOpenDirectory "C:\test\"
        DocNum = DocNum + 1
        ActiveDocument.SaveAs FileName:="Facture_" & DocNum & ".doc"
        ActiveDocument.Close

        Application.Browser.Next
    Next i
    ActiveDocument.Close savechanges:=wdDoNotSaveChanges
End Sub

person user1211458    schedule 15.02.2012    source источник


Ответы (1)


Приведенная ниже функция позволит вам извлечь первое слово (и, при желании, удалить его) из документа Word.

Public Function GetFirstWord(Optional blnRemove As Boolean = True) As String

    Dim rng As Range
    Dim intCharCount As Integer
    Dim strWord As String

    With ThisDocument
        Set rng = .Characters(1)

        intCharCount = rng.EndOf(wdWord, wdMove)

        With .Range(0, intCharCount - 1)
            strWord = .Text
            If blnRemove Then
                .Delete
            End If
        End With
    End With

    GetFirstWord = strWord

End Function

Надеюсь, это поможет.

person markblandford    schedule 15.02.2012
comment
Привет кремегг. Большое спасибо за ваш ответ. Я вызвал вашу функцию в своем основном цикле, но, к сожалению, получил ошибку выполнения 4608: значение вне допустимого диапазона. Отладчик показывает строку With .Range(0, intCharCount - 1), вы понимаете, что я сделал не так? Что это значит, если intCharCount имеет значение 0...? Может ли это быть из-за шапки моей страницы? - person user1211458; 15.02.2012
comment
intCharCount должен возвращать позицию первого пробела в документе. Я думаю, что intCharCount будет равен нулю только тогда, когда документ пуст, то есть в нем нет букв, слов или пробелов. - person markblandford; 15.02.2012
comment
Может быть. Предоставленная мной функция будет работать только с документом, в котором находится код (ThisDocument). Снова взглянув на код в вашем вопросе, попробуйте изменить мою функцию, чтобы использовать ActiveDocument, а не ThisDocument. - person markblandford; 15.02.2012
comment
Тогда я неправильно вызываю вашу функцию? Я уверен, что моя страница не пуста. Изменить: я только что заметил, что значение ThisDocument равно Normal.dotm. Разве это не должен быть мой документ? Я изменил его на ActiveDocument, но это тоже не работает, потому что ActiveDocument не всегда является исходным. Второе редактирование после вашего ответа: чтобы прояснить ситуацию. С ActiveDocument это работает в первый раз, но во второй ActiveDocument устанавливается с документом, который я открыл дальше в своем цикле. - person user1211458; 15.02.2012
comment
Где в вашем коде вы вызываете функцию? Я думаю, что если бы вы заменили DocNum + 1 вызовом функции, все было бы в порядке. - person markblandford; 15.02.2012
comment
Работает как амулет, я просто был глуп. Спасибо за ваше время человек! - person user1211458; 15.02.2012