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

Есть несколько способов решить эту проблему. Если цель состоит в том, чтобы просто включить текущее содержимое текстового файла, вам не понадобится макрос — просто используйте поле INCLUDETEXT для ссылки на файл, который вы хотите включить. Каждый раз, когда вы обновляете поля в документе, Word выходит, захватывает текущее содержимое текстового файла и включает его в ваш документ.

Однако, если вы хотите постоянно добавлять в документ текущее содержимое текстового файла, вам нужно будет использовать макрос. Один из простых подходов — использовать поле INCLUDETEXT в самом макросе следующим образом:

Sub InsertTextFileAfterBookmark1()

With Selection         .GoTo what:=wdGoToBookmark, Name:="mybmk"

.Fields.Add Range:=Selection.Range, _           Type:=wdFieldIncludeText, Text:="c:\\myfile.txt \c" _           & Chr(32) & "plaintext" & Chr(32) & ""

.MoveLeft , 1         .Fields.Unlink         .MoveEnd     End With End Sub

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

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

Другой подход — полностью отказаться от поля INCLUDETEXT и просто вставить содержимое файла. Следующая версия макроса делает именно это:

Sub InsertTextFileAfterBookmark2()

If ActiveDocument.Bookmarks.Exists("mybmk") = True Then         ActiveDocument.Bookmarks("mybmk").Select         Selection.InsertFile FileName:="c:\myfile.txt"

Else         MsgBox "Bookmark ""mybmk"" does not exist!"

End If End Sub

Макрос проверяет наличие закладки с именем mybmk (вы можете и должны это изменить), а затем использует метод InsertFile для вставки содержимого файла. Вы должны понимать, что, как написано, макрос перезапишет закладку. Если вы хотите убедиться, что закладка осталась нетронутой, вам нужно добавить строку кода, чтобы свернуть закладку до ее конечной точки, непосредственно перед вставкой файла:

Selection.Collapse Direction:=wdCollapseEnd

Разумеется, ваш макрос может быть настолько красивым, насколько вы хотите. В следующем примере показан более полнофункциональный макрос, который дает вам возможность указать, сколько места следует разместить между закладкой и содержимым файла, которое вы хотите вставить. Все, что вам нужно сделать, это убедиться, что вы настроили макрос в точках (1), (2) и (3), чтобы отразить, как вы хотите, чтобы он работал. (Комментарии в макросе объясняют, каковы ожидания и варианты.)

Sub InsertTextFileAfterBookmark3()

' This macro reads the contents of a specified text file     ' and inserts the text after a particular bookmark in     ' the active document.



Dim InsertSpacer As Integer     Dim FileContent As String

' (1) Pick a number to insert something between the     '     bookmark and the inserted text as spacing:

'     0 = No space. Text is inserted immediately     '         after the bookmark     '     1 = Insert one space between bookmark and text     '     2 = Insert paragraph mark between bookmark and text     '     3 = Insert 2 paragraph marks between bookmark     '         and text

InsertSpacer = 1

' (2) Set a constant for the name of the file to import.

'     Change the file name inside the quotes below to     '     the full path and file name of the text file to     '     import:



Const TextFile As String = "c:\myfile.txt"

' (3) Change the file name in the quotes below to the     '     name of the bookmark after which you want to     '     insert the text:



Const BookmarkName As String = "mybmk"



' Handle errors     On Error GoTo Oops

' Open and grab contents of the file     Open TextFile For Input As #1     FileContent = Input(LOF(1), #1)

Close #1

' Find the bookmark in the active document     Selection.GoTo What:=wdGoToBookmark, Name:="MyBookmark"



' Move the cursor to the end of the bookmark     Selection.MoveRight Unit:=wdCharacter, Count:=1

Select Case InsertSpacer         Case 0             ' Do nothing. Text inserted immediately         Case 1             ' Insert a space             Selection.TypeText Text:=" "

Case 2             'Insert a paragraph mark             Selection.TypeText Text:=vbCrLf         Case 3             'Insert two paragraph marks             Selection.TypeText Text:=vbCrLf & vbCrLf     End Select

' Insert the text file:

Selection.TypeText Text:=FileContent     Exit Sub

Oops:

Select Case Err.Number         Case 55 ' File already open             ' Close the file             Close #1             ' Try again             Resume         Case 53 ' File not found             NotFound = "Could not find the file named: " _             & Chr(34) & TextFile & Chr(34) & vbCrLf _             & vbCrLf & "Verify the file name and path " _             & "in the macro code after " _             & Chr(34) & "Const TextFile As String =" & Chr(34)

MsgBox NotFound, vbOKOnly         Case Else             MsgBox "Error number: " & Err.Number & ", " _             & Err.Description, vbOKOnly     End Select End Sub

_Примечание: _

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

link: / wordribbon-WordTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

WordTips — ваш источник экономичного обучения работе с Microsoft Word.

(Microsoft Word — самая популярная программа для обработки текстов в мире.) Этот совет (12193) применим к Microsoft Word 97, 2000, 2002 и 2003. Вы можете найти версию этого совета для ленточного интерфейса Word (Word 2007 и позже) здесь:

link: / wordribbon-Importing_a_Text_File_and_Inserting_after_a_Bookmark [Импорт текстового файла и вставка после закладки].