Microsoft KB Archive/258513

= How to paste a Rich Text Format string into Word with Visual Basic Automation =

Article ID: 258513

Article Last Modified on 5/14/2007

-

APPLIES TO


 * Microsoft Office Word 2007
 * Microsoft Office Word 2003
 * Microsoft Word 2002 Standard Edition
 * Microsoft Word 2000 Standard Edition
 * Microsoft Word 97 Standard Edition
 * Microsoft Visual Basic 6.0 Professional Edition
 * Microsoft Visual Basic 5.0 Professional Edition
 * Microsoft Visual Basic 6.0 Enterprise Edition
 * Microsoft Visual Basic 5.0 Enterprise Edition

-



This article was previously published under Q258513



SUMMARY
With Automation, you can do programmatically almost anything that the user can do manually in Microsoft Office Word. However, if you have lots of text that you want to enter and to format, it might require lots of code. If you can represent the data as a Rich Text Format (RTF) string, you can frequently reduce the Automation code. You can create an RTF string, copy the RTF string to the clipboard, and then paste the RTF string into the document.

This article describes how to build a simple Visual Basic example that starts Word, creates a new document, and adds some formatted text to the document by using a pre-built RTF string.



MORE INFORMATION
To create the example project, follow these steps:  Start Visual Basic, and then create a new Standard EXE. By default, a form that is named Form1 is created.  Add a CommandButton to the form, double-click the CommandButton, and then add the following code to the Click event. 'sRTF represents the rich-text-formatted string to paste into Word Dim sRTF As String sRTF = "{\rtf1\ansi\ansicpg1252\deff0\deftab720{\fonttbl" & _ "{\f0\fswiss MS Sans Serif;}{\f1\froman\fcharset2 Symbol;}" & _ "{\f2\froman\fprq2 Times New Roman;}}" & _ "{\colortbl\red0\green0\blue0;\red255\green0\blue0;}" & _ "\deflang1033\horzdoc{\*\fchars }{\*\lchars }" & _ "\pard\plain\f2\fs24 Line 1 of \plain\f2\fs24\cf1" & _ "inserted\plain\f2\fs24 file.\par }" 'Copy the contents of the Rich Text to the clipboard Dim lSuccess As Long Dim lRTF As Long Dim hGlobal As Long Dim lpString As Long lSuccess = OpenClipboard(Me.hwnd) lRTF = RegisterClipboardFormat("Rich Text Format") lSuccess = EmptyClipboard hGlobal = GlobalAlloc(GMEM_MOVEABLE Or GMEM_DDESHARE, Len(sRTF)) lpString = GlobalLock(hGlobal)

CopyMemory lpString, ByVal sRTF, Len(sRTF) GlobalUnlock hGlobal SetClipboardData lRTF, hGlobal CloseClipboard GlobalFree hGlobal 'Paste into a new Word document Dim oWord As Object Dim oDoc As Object Set oWord = CreateObject("word.application") Set oDoc = oWord.Documents.Add oWord.Selection.Paste oWord.Visible = True   Add the following code to the General Declarations section of the Form module. Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long Private Declare Function RegisterClipboardFormat Lib "user32" Alias _ "RegisterClipboardFormatA" (ByVal lpString As String) As Long Private Declare Function EmptyClipboard Lib "user32" As Long Private Declare Function CloseClipboard Lib "user32" As Long Private Declare Function SetClipboardData Lib "user32" ( _   ByVal wFormat As Long, ByVal hMem As Long) As Long Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, _   ByVal dwBytes As Long) As Long Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _   ByVal Destination As Long, Source As Any, ByVal Length As Long) Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long Private Declare Function GlobalFree Lib "kernel32" Alias "GlobalFree" ( _    ByVal hMem As Long) As Long

Private Const GMEM_DDESHARE = &H2000 Private Const GMEM_MOVEABLE = &H2  Press the F5 key to run the project. Word starts, and then a new document is created that contains formatted text.

