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

Article translations Article translations
Article ID: 258513 - View products that this article applies to.
Expand all | Collapse all

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:
  1. Start Visual Basic, and then create a new Standard EXE. By default, a form that is named Form1 is created.
  2. 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
     
    					
  3. 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
    					
  4. Press the F5 key to run the project. Word starts, and then a new document is created that contains formatted text.

References

For more information and for samples for developing Office solutions, visit the following Microsoft Web sites:
http://support.microsoft.com/ofd

http://msdn.microsoft.com/office

Properties

Article ID: 258513 - Last Review: June 19, 2014 - Revision: 7.0
Applies to
  • Microsoft Office Word 2007
  • Microsoft Word 2002
  • Microsoft Word 2000
  • Microsoft Word 97 Standard Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
Keywords: 
kbautomation kbhowto KB258513

Give Feedback

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com