Eric có một cơ sở dữ liệu Excel về thông tin công ty. Anh ấy muốn sử dụng macro Excel để sao chép địa chỉ và thông tin từ cơ sở dữ liệu sang các tài liệu Word khác nhau. Eric rất tò mò về cách anh ta có thể tạo macro Excel mở một tài liệu Word cụ thể mà thông tin sẽ được dán vào.

Một cách để hoàn thành nhiệm vụ này là không sử dụng Excel. Thay vào đó, hãy sử dụng tính năng phối thư của Word để lấy thông tin từ cơ sở dữ liệu Excel.

Cách tiếp cận này hoạt động tốt nhất nếu bạn đang tạo tài liệu từ thông tin được xác định rõ. Tuy nhiên, nếu bạn cần mở một loạt tài liệu và sao chép dữ liệu từ cơ sở dữ liệu Excel vào tài liệu, thì phối thư sẽ không thực hiện được thủ thuật.

Word có một tên đặc biệt để sử dụng macro làm việc với các ứng dụng Office khác nhau: Office Automation. Tạo macro Office Automation phức tạp hơn một chút so với việc tạo macro chỉ hoạt động trong một ứng dụng cụ thể, chẳng hạn như Excel. Một trong những điều bạn có thể muốn làm là tải xuống tệp Trợ giúp miễn phí bao gồm nhiều thông tin về các ứng dụng Tự động hóa Office. Bạn có thể tải xuống tệp tại trang sau của Microsoft:

http://support.microsoft.com/kb/302460

Quy trình cơ bản để mở tài liệu Word từ bên trong macro Excel là tạo một đối tượng tham chiếu đến ứng dụng Word, sau đó sử dụng đối tượng đó để mở tài liệu. Đoạn mã sau minh họa khái niệm này:

Sub OpenWord()

Dim wdApp As Object     Dim wdDoc As Object     Set wdApp = CreateObject("Word.application")

Set wdDoc = wdApp.Documents.Open _       (FileName:="C:\Path\myTestDoc.doc")



' put your code here for working with Word ' This is Word VBA code, not Excel code

wdDoc.Close savechanges:=False     Set wdDoc = Nothing     wdApp.Quit     Set wdApp = Nothing End Sub

Bạn sẽ cần thay đổi đường dẫn và tên tài liệu của tài liệu mà bạn muốn mở, nhưng đoạn mã này thể hiện rất tốt những gì cần phải làm để mở tài liệu. Khi được viết, tài liệu Word (thực sự là toàn bộ ứng dụng Word) sẽ không hiển thị trên màn hình. Nếu bạn muốn hiển thị ứng dụng, bạn nên sử dụng dòng mã này ở gần đầu macro:

wdApp.Visible = True

Một cách tiếp cận khác để làm việc với tệp Word từ bên trong macro Excel của bạn là sử dụng DDE và chức năng SendKeys để sao chép thông tin.

Hãy xem xét lệnh DDE sau:

ChannelNumber=Application.DDEInitiate{ _   app:="WinWord", topic:=FullPath

Phương thức DDEInitiate sử dụng hai thuộc tính: ứng dụng và chủ đề. Thuộc tính ứng dụng cho biết ứng dụng bạn đang mở qua DDE. Ví dụ điển hình có thể là “calc” cho máy tính hoặc “WinWord” (trong trường hợp này)

cho ứng dụng Word. Thuộc tính chủ đề cho biết đường dẫn đầy đủ đến tệp tài liệu bạn đang mở. Trong trường hợp này, đường dẫn đầy đủ được chứa trong biến FullPath.

Sử dụng phương pháp này, bạn có thể mở một tài liệu và sau đó sử dụng SendKeys để sao chép thông tin vào tài liệu đó:

Sub PasteExcel2Word()

Dim channelNumber As String  'Application Handle     Dim FullPath As String

FullPath = 'C:\MyFolder\MyFile.Doc'     'Replace above with a file or loop of files

Selection.Copy  'Assumes you hilighted what you want copied

channelNumber = Application.DDEInitiate( _       app:="WinWord", topic:=FullPath     SendKeys "^v", False

Application.DDETerminate channelNumber End Sub

Phương thức Copy được sử dụng để sao chép thông tin vào Clipboard, sau đó SendKeys sử dụng ^ v (Ctrl + V) để dán thông tin vào Word được mở bằng DDEInitiate.

_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 trang ExcelTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.

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

Mẹo này (2423) áp dụng cho Microsoft Excel 97, 2000, 2002 và 2003.