HOWTO: Get List of Documents & Bookmarks from Word for Windows

Last reviewed: September 29, 1997
Article ID: Q117846
The information in this article applies to:

- Standard and Professional Editions of Microsoft Visual Basic for

  Windows, versions 2.0 and 3.0
- Microsoft Visual Basic programming system for Windows, version 1.0 - Microsoft Word for Windows, version 2.0 - Microsoft Word for Windows, version 6.0

SUMMARY

When performing DDE between Microsoft Visual Basic and Microsoft Word for Windows, you need to supply a LinkTopic and a LinkItem. The LinkItem for much of the DDE to Word will be the name of a Bookmark in Word. This can be an obstacle if the Bookmark is not known in advance. This article shows how to get a listing of available Word Bookmarks from Visual Basic with the help of a Word Macro.

MORE INFORMATION

Step-by-Step Example to Find All Open Documents

When Word for Windows is running, all open Documents can be found by the System LinkTopic.

  1. Start a new project in Visual Basic. Form1 is created by default.

  2. Add a text box (Text1) and a command button (Command1) to the form.

  3. Add the following code to the Command1_Click event:

       Sub Command1_Click ()
          Text1.LinkTopic = "Winword|System"
          Text1.LinkMode = 2
          Text1.LinkItem = "Topics"
          Text1.LinkRequest
          Text1.LinkMode = 0
       End Sub
    
    

  4. Start Word for Windows.

  5. Start the Visual Basic program or press the F5 key.

  6. To display the available Documents currently open in Word for Windows in the Text1 box, click the Command1 button. If you open additional documents or close documents that are open, you refresh the list by again clicking the Command1 button.

Step-by-Step Example to Find Available Bookmarks

Once you identify the document you want, you can find the available Bookmarks that can be used as the LinkItem in DDE conversations.

  1. To the above example program, add another text box (Text2) and another command button (Command2).

  2. Create a new document in Word by choosing New from the File menu.

  3. Save the document as TEST.DOC by choosing Save As from the File menu.

  4. Add the following Word for Windows macro naming it EnumBookmarks. To create a new macro, choose Tools Macro from the Word menu. Name the macro EnumBookmarks and select Edit in Word version 2.0 or Create in Word version 6.0. Paste in the following code. Then close the macro window, and save your changes.

       'For Word for Windows 2.0, the code is as follows:
       Sub Main
          EndOfDocument
          InsertBookmark.Name = "Start"
          For Count = 1 to CountBookmarks()
             If BookmarkName$(Count) <> "Start" then
                InsertPara
                Insert BookmarkName$(Count)
          Endif
          Next Count
          ExtendSelection
          EditGoTo.Destination = "Start"
          InsertBookmark.Name="Start",.Delete
          InsertBookmark .Name = "BookmarkList"
       End Sub
    
       'For Word for Windows 6.0, the InsertBookmark command was replaced with
       'the EditBookmark command. Your macro code will need to reflect this
       'as follows:
       Sub MAIN
          EndOfDocument
          EditBookmark .Name = "Start"
          For Count = 1 To CountBookmarks()
          If BookmarkName$(Count) <> "Start" Then
             InsertPara
             Insert BookmarkName$(Count)
          EndIf
          Next Count
          ExtendSelection
          EditGoTo .Destination = "Start"
          EditBookmark .Name = "Start", .Delete
          EditBookmark .Name = "BookmarkList"
       End Sub
    
    

  5. Add the following code to the Command2_Click event:

       Sub Command2_Click ()
          Text2.LinkTopic = "Winword|System"
          Text2.LinkMode = 2
          Text2.LinkItem = "Topic"
          Text2.LinkExecute "[EnumBookmarks]"
          Text2.LinkMode = 0
          Text2.LinkTopic = "Winword|Test.Doc"
          Text2.LinkMode = 2
          Text2.LinkItem = "BookMarkList"
          Text2.LinkRequest
          Text2.LinkMode = 0
       End Sub
    
       NOTE: The second LinkTopic definition above assumes that Word's current
       directory is the same directory where TEST.DOC is located. If this
       is not the case, or if you are not certain whether or not this is the
       case, replace TEST.DOC with a full path such as C:\WORD\TEST.DOC.
    
    

  6. If it is not already running, start Word for Windows.

  7. Start the Visual Basic program (or press the F5 key).

  8. To see the available Bookmarks for the document TEST.DOC listed in the Text2 box, click the Command2 button. If you create or delete additional Bookmarks, you can refresh the list in the Text2 box by again clicking the Command2 button.

When you click the Command2 button, the EnumBookmarks Word macro runs. EnumBookmarks creates a new Bookmark called BookmarkList where it copies the names of all of the other bookmarks in the document. When the bookmark BookmarkList is retrieved. It will contain all the bookmarks in the document.

Once you identify the Documents and Bookmarks within Word for Windows, you can establish DDE sessions using the Document and Bookmark as LinkTopic and LinkItem values.

   Text1.LinkTopic = "WinWord|MyDoc.Doc" 'Sets up link with WINWORD.EXE.
   Text1.LinkItem = "MyBookmark"      'Set link to bookmark on document.

REFERENCES

For additional information, please see the following article in the Microsoft Knowledge Base:

   ARTICLE-ID: Q74862
   TITLE     : DDE Example Between Visual Basic and Word for Windows
Keywords          : IAPDDE vbwin GnrlVb kbinterop kbprg
Technology        : kbvba
Version           : WINDOWS:2.0 3.0
Platform          : WINDOWS
Issue type        : kbhowto


================================================================================


THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Last reviewed: September 29, 1997
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.