Useful WordBasic commands that have no VBA equivalent
Getting Help with WordBasic Commands 
Microsoft has made the old WordBasic help file available online. for further information about 
WordBasic commands, you can download it from here.. 
Send all feedback to word@mvps.org  
Top  - Ctrl+Home
Previous - Alt+left arrow
Page Updated: 
http://word.mvps.org/FAQs/MacrosVBA/WordBasicCommands.htm (4 of 4)10/16/09 5:44 PM
Table from pdf to powerpoint - application software cloud:C# Create PDF from PowerPoint Library to convert pptx, ppt to PDF in C#.net, ASP.NET MVC, WinForms, WPF
Online C# Tutorial for Creating PDF from Microsoft PowerPoint Presentation
www.rasteredge.com
Table from pdf to powerpoint - application software cloud:VB.NET Create PDF from PowerPoint Library to convert pptx, ppt to PDF in vb.net, ASP.NET MVC, WinForms, WPF
VB.NET Tutorial for Export PDF file from Microsoft Office PowerPoint
www.rasteredge.com
Working with Bookmarks in VBA
Microsoft Word MVP FAQ Site
Home 
Site Map 
Word:mac 
FAQ 
Tutorials 
Downloads 
Find Help 
Suggestions 
Links 
About Us 
Search
Working with Bookmarks in VBA
Article contributed by Ibby  
Types of Bookmarks
The most important thing you need to know when working with bookmarks in Word is that 
there are two “types” of bookmarks – “placeholder” bookmarks and “enclosing” bookmarks. 
Before we proceed, and whenever you work with bookmarks, you should turn on display of 
bookmarks by going to Tools | Options | View and selecting “Bookmarks”. This makes it 
easier to see what's actually happening. 
(1) Placeholder Bookmarks  
If you click somewhere in the document and insert a bookmark it will look like a beam 
I
– this 
is a “placeholder” bookmark. 
(2) Enclosing Bookmarks  
Now, if you select some text and insert a bookmark it will look like the selected text is 
enclosed in square brackets ie: [selected text] – this is an “enclosing” bookmark. 
Inserting and retrieving text from a Bookmark
There are several methods of inserting text at/into a bookmark. The method you use depends 
on whether you need to retrieve the text from the bookmark at a later time. 
Lets look at the more obvious ways of inserting text at a bookmark. 
ActiveDocument.Bookmarks("myBookmark").Range.Text = "Inserted Text" 
If the bookmark is a placeholder bookmark, the inserted text will look like this: 
I
Inserted Text 
If the bookmark is an enclosing bookmark, it will be deleted, and the inserted text will appear 
in it's place. 
ActiveDocument.Bookmarks("myBookmark").Range.InsertBefore _  
"Inserted Text" 
ActiveDocument.Bookmarks("myBookmark").Range.InsertAfter _  
"Inserted Text" 
With both these methods, if the bookmark is a placeholder bookmark, the text will be inserted 
after the bookmark: 
I
Inserted Text 
With enclosing bookmarks (even if the bookmark only encloses a space), the following occurs: 
InsertAfter – [ Original Text ] Inserted Text  
InsertBefore – [ Inserted Text Original Text ] 
In order to retrieve the text in a bookmark, the bookmark needs to be  
an enclosing bookmark. Then you can use the following to retrieve the text from the 
bookmark: 
strBookmark = ActiveDocument.Bookmarks("myBookmark").Range.Text 
You have already seen how to add text to an enclosing bookmark using the InsertBefore 
method above. But what if you want to insert text into a placeholder bookmark (making it an 
enclosing bookmark) so that you can retrieve the text from it at a later time ? And what if the 
bookmark is already an enclosing bookmark but you want to replace the text inside it ? There 
is no single command in VBA to achieve this. What you need to do is replace the bookmark 
with the inserted text (the bookmark is deleted), then re-create the bookmark around the 
inserted text. The following code is an example of how this is done: 
http://word.mvps.org/FAQs/MacrosVBA/WorkWithBookmarks.htm (1 of 2)10/16/09 5:44 PM
application software cloud:C# Word - Table Processing in C#.NET
C# Word - Table Processing in C#.NET. Provide C# Users with Variety of Methods to Setup and Modify Table in Word Document. Overview. Create Table in Word.
www.rasteredge.com
application software cloud:C# Word - Table Row Processing in C#.NET
C# Word - Table Row Processing in C#.NET. How to Set and Modify Table Rows in Word Document with C#.NET Solutions. Overview. Create and Add Rows in Table.
www.rasteredge.com
Working with Bookmarks in VBA
Dim bmRange As Range  
Set bmRange = ActiveDocument.Bookmarks("myBookmark").Range  
bmRange.Text = "Inserted Text"  
ActiveDocument.Bookmarks.Add _  
Name:="myBookmark", _  
Range:=bmRange 
See also Inserting text at a bookmark without deleting the bookmark
Send all feedback to word@mvps.org  
Top  - Ctrl+Home
Previous - Alt+left arrow
Page Updated: 
http://word.mvps.org/FAQs/MacrosVBA/WorkWithBookmarks.htm (2 of 2)10/16/09 5:44 PM
application software cloud:C# Word - Table Cell Processing in C#.NET
C# Word - Table Cell Processing in C#.NET. Online Tutorial for Users to Set and Modify Table Cells in Word Document. Overview. Create and Add Cells in Table.
www.rasteredge.com
application software cloud:How to C#: Convert PDF, Excel, PPT to Word
Footnote & Endnote Processing. Table Row Processing. Table Cell Processing. VB.NET How-to, VB.NET PDF, VB.NET Word, VB.NET Excel, VB.NET PowerPoint, VB.NET Tiff
www.rasteredge.com
Determine the index number of the current paragraph, table, section ...
Microsoft Word MVP FAQ Site
Home 
Site Map 
Word:mac 
FAQ 
Tutorials 
Downloads 
Find Help 
Suggestions 
Links 
About Us 
Search
Determine the index number of the current 
paragraph, table, section ...
Or of any object that has a Range property 
Article contributed by Dave Rado
with acknowledgments to Andrew Gabb, Jonathan West and Ibby  
Note that none of the following applies reliably if you are in Outline View; if you are, you need 
to change to some other view, such as Normal view, first.
1. In order to operate on the currently selected paragraph, table, 
section, etc.
The first questions is – why do you need to know the index number?  If you want to know 
in order to operate on the currently selected paragraph, table or other object, you can 
simply use: 
Selection.CollectionName(1) 
For example: 
Selection.Paragraphs(1).Range.Font.Bold = True 
Selection.Sections(1).Headers(wdHeaderFooterPrimary).Range.Text = "Hello" 
Selection.Tables(1).Borders.Enable = False 
All the above operate on the currently selected object. 
Similarly, if you were working with a range variable, you could use: 
MyRange.Paragraphs(1).Range.Font.Bold = True 
Etc. 
However if you really do need to know the index number, use the following method: 
2. Get the index number, by setting a range to the start of the document
The fastest and simplest way to get the index number, by far, is to set a range from the 
start of the document to the end of the first selected paragraph (or other object); and then 
use the Count property, as follows: 
MsgBox ActiveDocument.Range(0, Selection.Paragraphs(1).Range.End).Paragraphs.Count 
MsgBox ActiveDocument.Range(0, Selection.Sections(1).Range.End).Sections.Count 
MsgBox ActiveDocument.Range(0, Selection.Tables(1).Range.End).Tables.Count 
Again, you could also use this method to get the index number of a range rather than of a 
selection, as follows: 
MsgBox ActiveDocument.Range(0, MyRange.Paragraphs(1).Range.End).Paragraphs.Count 
Etc. 
This method was suggested in the newsgroups by Andrew Gabb.
Send all feedback to word@mvps.org  
Top  - Ctrl+Home
Previous - Alt+left arrow
Page Updated: 
http://word.mvps.org/FAQs/MacrosVBA/GetIndexNoOfPara.htm10/16/09 5:44 PM
application software cloud:C# Word - Header & Footer Processing in C#.NET
Create and Add Table to Footer & Header. The following demo code shows how to create table in footer and header. String docFilePath
www.rasteredge.com
application software cloud:How to C#: Overview of Using XDoc.Word
Rapidly load, create, and edit Word document (pages) in C# class library. Able to render and convert Word document to/from supported document (PDF and ODT).
www.rasteredge.com
How to customise the Control Toolbox in the VB Editor 
Microsoft Word MVP FAQ Site
Home 
Site Map 
Word:mac 
FAQ 
Tutorials 
Downloads 
Find Help 
Suggestions 
Links 
About Us 
Search
How to customise the Control Toolbox in the 
VB Editor 
So that you don't have to set up all the properties for your controls every time you add one to 
a UserForm 
Article contributed by Dave Rado 
Supposing you frequently need to add Multiline Text Boxes to your UserForms, with the 
EnterKeyBehavior property set to True.  Or let's say you want to drag a “Next” button straight 
onto your userform and not have to change the text in it to say “Next”, and not have to 
change the dimensions of the button. 
A timesaver you might find useful; having created your multi-line textbox or Next button, or 
whatever, and having set all its properties the way you want them, drag your control  onto the 
Control Toolbox.  
Then right click on the new control, and select “Customize”.
Change the Tooltip text to “Multiline Textbox” or “Next button”, or whatever. 
You can then edit the button images on the Control Toolbox if you want, to make it easier to 
tell them apart (also under Customize, then click on Edit Picture). 
In future you can save yourself time by dragging the new control straight onto your UserForms 
and the appropriate properties will be set straight away. 
I use this for all my frequently used buttons such as an OK, Cancel, Next and Previous, as 
well as for various different types of text labels, text boxes, frames, and so on.  As well as 
saving time, it also helps greatly in making all your userforms look consistent. 
You can add additional tabs (or “pages”) to the toolbox – right click, New Page.  For instance 
I have one for my buttons and one for my other controls.
Best of all, you can export your customised toolbox, one “page” at a time – right-click, Export 
Page; and other members of your workgroup can import the resulting .pag file(s) - right-click, 
Import Page.  This helps greatly in achieving consistency throughout a group of developers.  It 
also means to can take your customisations with you – if you buy a new PC, for example.
Send all feedback to word@mvps.org  
Top  - Ctrl+Home
Previous - Alt+left arrow
Page Updated: 
http://word.mvps.org/FAQs/MacrosVBA/CustomizeControlToolbox.htm10/16/09 5:44 PM
application software cloud:C# Word - Document Processing in C#.NET
0); //Save the document doc0.Save(@""). Create, Add, Delete or Modify Paragraph and Table in Word Document. If you want to create
www.rasteredge.com
application software cloud:C# Word - Word Create or Build in C#.NET
Create Word Document from Existing Files Using C#. Create Word From PDF. Create Word From PowerPoint. Create Word From Open Office Files. Table Processing.
www.rasteredge.com
Intercepting events like Save and Print
Microsoft Word MVP FAQ Site
Home 
Site Map 
Word:mac 
FAQ 
Tutorials 
Downloads 
Find Help 
Suggestions 
Links 
About Us 
Search
Intercepting events like Save and Print
Article contributed by Dave Rado, Anna-Karin Bohman and Jonathan West 
Intercepting commands 
To intercept any Word command, you can: 
1. Press Alt+ F8 to bring up the Macros dialog and where it says “Macros in”,  
select “Word Commands”. 
2. Find and select one of the commands you want to intercept – for instance, to intercept 
the Print commands you need to find FilePrint and FilePrintDefault.  To intercept the 
Save commands you need to find FileSave, FileSaveAs and FileSaveAll 
3. Where it says “Macros in”, select the template you want to store the macro in, and click 
“Create”. 
4. The code needed to execute the command will be written for you;  just add your own 
code. 
In the case of the Save event, writing FileSave, FileSaveAs and FileSaveAll macros isn't 
enough, because they won't intercept the user closing an unsaved document and being asked 
if they want to save changes – but you can intercept that by writing a macro called 
AutoClose or by writing a Document_Close event procedure in the “ThisDocument” code 
module. 
See also: 
Word commands, and their descriptions, default shortcuts and menu assignments 
How to make the Paste Special dialog default to pasting Inline rather than Floating 
If you are using a version of Word other than English 
If you are not using an English version of Word, and if you create a macro using the name 
shown in the list of Word commands, only the description of what the macro does will be 
added to the new macro, not the necessary code. To get the necessary code, you have to 
create a macro using the English name for the command! But how do you find out the English 
name? You can get a full list of the English commands from here.
When you get the command's name right, the listbox at the very bottom will display the 
description of what the command does: 
http://word.mvps.org/FAQs/MacrosVBA/InterceptSavePrint.htm (1 of 2)10/16/09 5:45 PM
application software cloud:C# Word - Footnote & Endnote Processing in C#.NET
Create or Add Table in Footnote & Endnote. The following demo code shows how to create table in the footnote. String docFilePath
www.rasteredge.com
application software cloud:C# Word - Convert Word to PDF in C#.NET
Word: Convert Word to PDF. C# Word - Convert Word to PDF in C#.NET. Online C# Tutorial for Converting Word to PDF (.pdf) Document. Word to PDF Conversion Overview
www.rasteredge.com
Intercepting events like Save and Print
Intercepting events (Word 2000 or later) 
Intercepting a command isn't quite the same as intercepting events, but in most cases it's the 
best you can do. However, in Word 2000 or later, a number of new Application Events were 
made available in VBA. 
Two Application Events you can use include DocumentBeforeSave and 
DocumentBeforePrint. Both of these, but especially the former, work better than trying to 
intercept the relevant commands. 
If not familiar with writing application event procedures, see the article: Writing application 
event procedures
A DocumentBeforePrint event procedure looks like this: 
Private Sub oApp_DocumentBeforePrint(ByVal Doc As Document, _ 
Cancel As Boolean
'Your code here   
End Sub 
If you want to prevent printing from occurring in certain circumstances, you can set the Cancel 
variable to True, e.g.: 
Private Sub oApp_DocumentBeforePrint(ByVal Doc As Document, _ 
Cancel As Boolean
Dim Result As Long 
Result = MsgBox("Have you checked the " & "printer for letterhead paper?", vbYesNo) 
If Result = vbNo Then Cancel = True 
End Sub 
A DocumentBeforeSave procedure looks like this: 
Private Sub oApp_DocumentBeforeSave(ByVal Doc As Document, _ 
SaveAsUI As Boolean, Cancel As Boolean
'Your code here   
End Sub 
Again, you can set Cancel = True if you want to cancel the save. 
If you set the SaveAsUI variable to True, the Save As dialog box will be displayed. 
Send all feedback to word@mvps.org  
Top  - Ctrl+Home
Previous - Alt+left arrow
Page Updated: 
http://word.mvps.org/FAQs/MacrosVBA/InterceptSavePrint.htm (2 of 2)10/16/09 5:45 PM
Writing application event procedures
Microsoft Word MVP FAQ Site
Home 
Site Map 
Word:mac 
FAQ 
Tutorials 
Downloads 
Find Help 
Suggestions 
Links 
About Us 
Search
Writing application event procedures
Or how to intercept events affecting any open document, such as the user changing focus 
from one document to another
Article contributed by Dave Rado, with acknowledgements to Bill Coan 
You can respond to certain application-level events using Auto macros – see: Running a 
macro automatically when Word starts or quits. However, to respond to other application 
events you need to create an application object declared “WithEvents” – i.e. declared in such 
a way that it will respond to events.
How to set up code that will respond to application events
If you open a template, press Alt+F11, and in  the Project window of the VBA environment, 
double-click on  “Microsoft Word Objects”, you'll see a built-in Class Module called  
“ThisDocument”. If you open this, you can use the list boxes on the toolbar to help you create 
document event procedures.
So it would make sense for there to be another built-in class module called “ThisApplication”; 
but Microsoft, in their wisdom, felt this would be too user-friendly, so you have to create your 
own ... Help is very unhelpful on the topic – there isn't even a definition in Help of what a 
Class is ! – but if you're interested, Bill Coan covered the topic at http://msdn.microsoft.com/
library/default.asp?url=/library/en-us/dnword2k2/html/odc_wdappevnt.asp.
In essence, though, a Class is simply a container object which allows you to create 
properties, which are objects in their own right, and then create properties and methods for 
those objects.
Note that the “big picture” view of what we're about to do is this:
We want to respond to events.
We need an application variable (declared with WithEvents) to receive the events.
We need a class module to serve as a container for the application variable. 
So here's how to create an application event procedure:
1. Create an Addin; that is, a .dot file stored in Word's startup directory so that it is global.
2. Open the Addin, and in the VB Editor, select Insert + Class Module.
Rename the Class Module from Class1 to ThisApplication.
Note: The Class Module and all the variables in this article can be called whatever you 
like; but I have tried to make all the names as meaningful as possible.
I like “ThisApplication” because it shows that it is functionally analogous to the built-in 
“ThisDocument” class module.  But note that your “ThisApplication” object is simply a 
container. It doesn't actually represent an application. It represents all the properties of 
the Class Object, whatever we define those properties to be.
http://word.mvps.org/FAQs/MacrosVBA/AppClassEvents.htm (1 of 4)10/16/09 5:45 PM
Writing application event procedures
3. Insert the following code in the Class Module:
Option Explicit 
Public WithEvents oApp As Word.Application
This specifies that oApp is an object variable which will be used to respond to the events 
triggered by the ActiveX object Word.Application.
By declaring it publicly, you have made oApp a property of the class object 
ThisApplication.  
At this point you are simply declaring what type of object oApp is (its type being a Word 
Application object), and declaring the fact it will respond to events. You are not actually 
assigning the oApp variable to the Word application yet – that comes later. So the oApp 
object doesn't actually exist yet (and no area of memory has been set aside for it yet).
The WithEvents keyword can only be used in Class Modules and can only refer to 
ActiveX –  i.e. OLE-compliant – objects.
4. Now select Insert + Module.
In the Module, insert the following code:
Option Explicit 
Dim oAppClass As New ThisApplication
Where “ThisApplication” is the name of your Class Module. The statement creates an 
object variable oAppClass which references (is a pointer to) the class object 
ThisApplication which you created earlier.
Using the keyword “New” in the declaration creates a new instance  of the class object – 
that is, it loads an instance of the class into memory and makes the variable oAppClass 
point to the newly created instance.
From now on, you can refer to this new instance of the class by using the oAppClass 
variable.
Now add the following code in the same Module:
Public Sub AutoExec() 
Set oAppClass.oApp = Word.Application  
End Sub
The oApp object is a property of the class object oAppClass, because you declared it as 
a public variable in the Class Module in step 3.
The above code creates an instance of the oApp object (loads it into memory), and 
makes it actually refer to the Word.Application object. In effect it makes the oApp object 
exist. 
To put it another way, you have now assigned the actual Active-X Word Application to the 
variable, whereas previously you had only declared what type of variable it was going to 
be.
By calling your procedure AutoExec, you make it run automatically when your Addin 
loads – and your Addin will automatically load when Word loads.
5. Now run the AutoExec macro, by clicking in it and pressing F5, to initialise the oApp 
object.
6. Switch to your ThisApplication Class Module. You'll see two list boxes on the toolbar. If 
you pull down the one on the left, and change it from “(General)” to “oApp”, a procedure 
called oApp_Quit() will be created. If you then pull down the list box on the right, you'll 
see several other application events to choose from (and you can delete the oApp_Quit() 
procedure later, if you don't want it):
a) In Word 97, you only have the choice of Quit and DocumentChange.
b)
In Word 2000, you have the choice of:
Quit
DocumentChange
DocumentBeforeClose
DocumentBeforePrint
DocumentBeforeSave
DocumentOpen
NewDocument
http://word.mvps.org/FAQs/MacrosVBA/AppClassEvents.htm (2 of 4)10/16/09 5:45 PM
Writing application event procedures
WindowActivate
WindowBeforeDoubleClick
WindowBeforeRightClick
WindowDeactivate
WindowSelectionChange
Note that (rather confusingly) these are all Application events (even though some of 
them refer to documents doing things) as distinct from Document events such as 
Document_Close. Because it is an Application event, for instance, a procedure called 
oApp_DocumentBeforeClose will fire when any document closes; whereas because it is 
a Document event, a Document_Close procedure will only fire when documents based on 
the template that the Document_Close procedure is stored in are closed. 
7. Having inserted the event procedure you want using the listboxes, add your code, and 
you're done. 
Note: If you want to monitor application events affecting documents based on a specific 
template, you can either store the event code in a global Addin as described above and test 
for which template is in use by using ActiveDocument.AttachedTemplate; or you can store 
the event code in the “ThisDocument” Class Module of the relevant template. 
For an example of the latter, see: How can I prevent users from editing the header of a 
document in Word 2000 or higher? 
Summary of set-up procedure
oApp_Quit
An oApp_Quit event procedure works in exactly the same way as an AutoExit macro – it fires 
when Word quits. Unfortunately, both the AutoExit macro and the oApp_Quit procedure fire 
after any “Do you want to save changes” dialogs have appeared. 
There is no event of the Application object analogous to an AutoExec macro, however. 
oApp_DocumentChange
The DocumentChange event triggers whenever you open/close/create a document and 
whenever you change focus from one document to another. If the event code is stored in an 
Addin, it will be global.
In Word 2000, there are separate events you can use for each of these – 
http://word.mvps.org/FAQs/MacrosVBA/AppClassEvents.htm (3 of 4)10/16/09 5:45 PM
Documents you may be interested
Documents you may be interested