James có một chương trình, bên ngoài Word, tự động tạo một tệp văn bản nhỏ thường xuyên. (Tệp văn bản luôn có cùng tên.) James nghĩ sẽ rất tuyệt nếu có một macro có thể nhập tệp văn bản vào tài liệu Word và chèn nó ngay sau dấu trang mà anh ta đã xác định trong tài liệu.

Có một số cách bạn có thể tiếp cận vấn đề này. Nếu mục tiêu chỉ là bao gồm bất kỳ nội dung hiện tại của tệp văn bản là gì, thì bạn sẽ không cần macro — chỉ cần sử dụng trường INCLUDETEXT để tham chiếu đến tệp bạn muốn đưa vào. Mỗi khi bạn cập nhật các trường trong tài liệu của mình, Word sẽ đi ra ngoài và lấy nội dung hiện tại của tệp văn bản và đưa nó vào tài liệu của bạn.

Tuy nhiên, nếu bạn muốn liên tục thêm nội dung hiện tại của tệp văn bản vào tài liệu của mình, thì bạn sẽ cần sử dụng macro. Một cách tiếp cận đơn giản là sử dụng trường INCLUDETEXT trong chính macro, theo cách này:

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) & ""

Macro chuyển đến vị trí của dấu trang, chèn trường INCLUDETEXT, chọn trường, sau đó hủy liên kết trường đó. Kết quả là nội dung của tệp văn bản được chèn vào tài liệu. Mục đích của việc hủy liên kết trường về cơ bản là loại bỏ trường INCLUDETEXT, thay thế nó bằng các kết quả của trường đó (nội dung tệp).

Để sử dụng macro, chỉ cần thay đổi mã để phản ánh tên của dấu trang và đường dẫn đầy đủ đến tệp văn bản bạn muốn chèn. Ngoài ra, hãy đảm bảo rằng bạn sử dụng dấu gạch chéo ngược kép trong đặc tả đường dẫn; điều này là bắt buộc để mã trường hoạt động bình thường.

Một cách tiếp cận khác là bỏ qua hoàn toàn trường INCLUDETEXT và chỉ cần chèn nội dung của tệp. Phiên bản sau của macro thực hiện điều đó:

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

Macro kiểm tra sự tồn tại của dấu trang có tên mybmk (bạn có thể và nên thay đổi điều này) và sau đó sử dụng phương thức InsertFile để chèn nội dung của tệp. Bạn nên nhận ra rằng, như đã viết, macro sẽ ghi đè dấu trang. Nếu bạn muốn đảm bảo rằng dấu trang vẫn còn nguyên vẹn, thì bạn sẽ cần thêm một dòng mã để thu gọn dấu trang về điểm cuối của nó, ngay trước khi chèn tệp:

Selection.Collapse Direction:=wdCollapseEnd

Tất nhiên, macro của bạn có thể lạ mắt như bạn muốn. Ví dụ sau cho thấy một macro đầy đủ tính năng hơn cung cấp cho bạn tùy chọn chỉ định bao nhiêu không gian để đặt giữa dấu trang và nội dung tệp bạn muốn chèn. Tất cả những gì bạn cần làm là đảm bảo rằng bạn điều chỉnh macro tại các điểm (1), (2) và (3) để phản ánh cách bạn muốn nó hoạt động. (Các bình luận trong macro giải thích các kỳ vọng và tùy chọn là gì.)

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

_Lưu ý: _

Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên các trang WordTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.

WordTips là nguồn của bạn để đào tạo Microsoft Word hiệu quả về chi phí.

(Microsoft Word là phần mềm xử lý văn bản phổ biến nhất trên thế giới.) Mẹo này (12193) áp dụng cho Microsoft Word 97, 2000, 2002 và 2003. Bạn có thể tìm thấy phiên bản của mẹo này cho giao diện ribbon của Word (Word 2007 và sau này) tại đây: