Импорт текстового файла и вставка после закладки (Microsoft Word)
У Джеймса есть внешняя по отношению к 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 [Импорт текстового файла и вставка после закладки]
.