ByVal ConnectMode As Add-InDesignerObjects.ext_ConnectMode, _
ByVal Add-InInst As Object, custom() As Variant)
‘ Set the Add-In instance’s Object property to be this class,
‘ providing access to the Com Add-In’s object model from within VBA.
‘ Note that we don’t use Set here!
Add-InInst.object = Me
End Sub
‘ Property to return a reference to our Simple class, providing access
‘ from VBA:
‘vaSeq = Application.ComAdd-Ins(“Excel2007ProgRef.ComAdd-In”).Object _
‘        .SimpleFuncs.Sequence(...)
Public Property Get SimpleFuncs() As Simple
Set SimpleFuncs = New Simple
End Property
Save the project and use File➪Make Excel2007ProgRef.dll to build the DLL. Start Access 2007 with a
blank database, create a new form, add a list box, and copy the following code into the form’s code 
module:
Private Sub Form_Load()
Dim vaSequence As Variant
Dim i As Integer
‘ Use the COMAdd-In to get the sequence
vaSequence = Application.COMAddIns(“Excel2007ProgRef.AccessAddIn”) _
.Object.SimpleFuncs.Sequence(5, 10, 2)
‘ Add the sequence to the list box
List0.RowSourceType = “Value list”
For i = LBound(vaSequence) To UBound(vaSequence)
List0.AddItem vaSequence(i)
Next
End Sub
Save the form and run it to show the COM Add-In at work (see Figure 18-3).
Figure 18-3
408
Chapter 18: Automation Add-Ins and COM Add-Ins
Pdf rotate all pages - rotate PDF page permanently in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Empower Users to Change the Rotation Angle of PDF File Page Using C#
pdf rotate all pages; how to reverse pages in pdf
Pdf rotate all pages - VB.NET PDF Page Rotate Library: rotate PDF page permanently in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
PDF Document Page Rotation in Visual Basic .NET Class Application
reverse pdf page order online; how to rotate one pdf page
Summary
In Excel 2007, Microsoft has provided a number of ways to extend Excel using Add-Ins written in Visual
Basic, or any other language that can produce Component Object Model (COM) DLLs, including .NET:
With Automation Add-Ins, you can add new functions for use in Excel worksheets and VBA
routines.
The performance of Automation and COM Add-Ins is typically much faster than their VBA
equivalents.
With COM Add-Ins, you can add new menu items and respond to Excel’s events. You can also
use these to create Add-Ins that work across multiple Office applications and the VBE.
The COM Add-In can provide programmatic access to the behavior of the Add-In, such as
enabling or disabling its actions, or using its functions.
In Excel 2007, COM Add-Ins can be used for application-level customization of the Ribbon or to
create custom task panes.
The Custom Task Pane extensibility model can be used to create multiple CTPs within a single
COM Add-In and expose the CTP-creation features to VBA.
The RibbonX extensibility model forces you to declare your UI customizations as soon as the
COM Add-In is loaded, preventing you from exposing RibbonX to VBAor creating highly
dynamic interfaces.
409
Chapter 18: Automation Add-Ins and COM Add-Ins
VB.NET PDF Page Delete Library: remove PDF pages in vb.net, ASP.
NET example for how to delete several defined pages from a PDF document Dim detelePageindexes = New Integer() {1, 3, 5, 7, 9} ' Delete pages. All Rights Reserved
how to save a pdf after rotating pages; rotate all pages in pdf file
VB.NET PDF Page Insert Library: insert pages into PDF file in vb.
doc2.InsertPages(pages, pageIndex) ' Output the new document how to use VB to insert an empty page to a specific location of current PDF file All Rights Reserved
reverse page order pdf online; rotate pdf pages on ipad
C# PDF Page Delete Library: remove PDF pages in C#.net, ASP.NET
1. public void DeletePages(int[] pageIndexes). Description: Delete specified pages from the input PDF file. Parameters: All Rights Reserved.
how to rotate just one page in pdf; how to rotate all pages in pdf
C# PDF Page Insert Library: insert pages into PDF file in C#.net
how to merge PDF document files by C# code, how to rotate PDF document page to insert empty pages to a specific location of current PDF file. All Rights Reserved
pdf page order reverse; pdf reverse page order online
Interacting with Other
Office Applications
The Office application programs Excel, Word, PowerPoint, Outlook, and Access all use the same
VBAlanguage. Once you understand VBAsyntax in Excel, you know how to use VBAin all the
other applications. Where these applications differ is in their object models.
One of the really nice things about the common VBAlanguage is that all the Office applications
are able to expose their objects to each other, and you can program interaction between all of the
applications from any one of them. To work with Word objects from Excel, for example, you only
need to establish a link to Word, and then you have access to its objects as if you were program-
ming with VBAin Word itself.
This chapter explains how to create the link in a number of different ways, and presents some sim-
ple examples of programming the other application. In all cases, the code is written in Excel VBA,
but it could easily be modified for any other Office application. The code is equally applicable to
products outside Office that support the VBAlanguage. These include other Microsoft products
such as Visual Basic and SQLServer. There is also a growing list of non-Microsoft products that
can be programmed in the same way.
Establishing the Connection
Once you have made a connection with an Office application, its objects are exposed for automa-
tion through a type library. There are two ways to establish such a connection: latebindingand
earlybinding. In either case, you establish the connection by creating an object variable that refers
to the target application, or a specific object in the target application. You can then proceed to use
the properties and methods of the object referred to by the object variable.
In late binding, you create an object that refers to the Office application before you make a link 
to the Office application’s type library. In earlier versions of the Office applications, it was neces-
sary to use late binding, and you will still see it used because it has some advantages over early
VB.NET PDF - WPF PDF Viewer for VB.NET Program
Users can rotate PDF pages, zoom in or zoom out PDF pages and WPF PDF Viewer for VB.NET is a PDF utility annotation rectangle, polygon and so on are all can be
how to reverse page order in pdf; how to rotate one page in pdf document
C# WPF PDF Viewer SDK to view PDF document in C#.NET
Compatible with all Windows systems and supports .NET Framework 2.0 & above versions. A powerful .NET WPF component able to rotate one PDF page or whole PDF
pdf rotate one page; rotate pdf page by page
binding. One advantage is that you can write code that can detect the presence or absence of the
required type library on the PC running your code, and link to different versions of applications based
on decisions made as the code executes.
Late binding is very useful when you have to run an application under different versions of Office.
Office happily upgrades an application’s early boundlinks when those links are to an earlier version.
Unfortunately, the opposite is not true. An application linked to a later version of Office than the version
it is running under gives errors. The problem is compounded if users can save the changes to the links in
applications on a network. Because late binding does not create the links until execution time, the links
are always to the version it is running under.
The disadvantage of late binding is that the type library for the target application is not accessed when
you are writing your code. Therefore, you get no help information regarding the application, you cannot
reference the intrinsic constants in the application, and when the code is compiled, the references to the
target application may not be correct, because they cannot be checked. The links are only fully resolved
when you try to execute the code, and this takes time. It is also possible that coding errors may be
detected at this point that cause your program to fail.
Early binding is supported by all the Office applications, from Office 97 onward. Code that uses early
binding executes faster than code using late binding, because the target application’s type library is pre-
sent when you write your code. Therefore, more syntax and type checking can be performed, and more
linkage details can be established, before the code executes.
It is also easier to write code for early binding because you can see the objects, methods, and properties
of the target application in the Object Browser, and as you write your code, you will see automatic tips
appear, such as a list of related properties and methods after you type an object reference. You can also
use the intrinsic constants defined in the target application.
Late Binding
The following code creates an entry in the Outlook calendar. The code uses the late binding technique:
Sub MakeOutlookAppointment()
‘Example of Outlook automation using late binding
‘Creates an appointment in Outlook
Dim olApp As Object ‘Reference to Outlook
Dim olAppointment As Object ‘Reference to Outlook Appointment
Dim olNameSpace As Object ‘Reference to Outlook NameSpace
Dim olFolder As Object ‘Dummy reference to initialize Outlook
Const olAppointmentItem = 1 ‘Outlook intrinsic constants not available
Const olFolderInbox = 6 ‘Outlook intrinsic constants not available
‘Create link to Outlook
In the following examples that involve Outlook, you could be interrupted by your
virus scanning software when accessing Outlook, because the scanner could identify
your actions as possible virus activity.
412
Chapter 19: Interacting with Other Office Applications
VB.NET PDF - View PDF with WPF PDF Viewer for VB.NET
Compatible with all Windows systems and supports .NET Framework 2.0 & above versions. Able to rotate one PDF page or whole PDF while in viewing.
pdf save rotated pages; rotate pdf pages and save
C# TIFF: How to Rotate TIFF Using C# Code in .NET Imaging
VB.NET How-to, VB.NET PDF, VB.NET Word, VB.NET Excel, VB TIFFPage)doc.GetPage(0); page.Rotate(RotateOder.Clockwise90); doc.Save(@"C:\rotate.tif All Rights Reserved
how to rotate a single page in a pdf document; rotate individual pages in pdf
Set olApp = CreateObject(“Outlook.Application”)
Set olNameSpace = olApp.GetNamespace(“MAPI”)
Set olFolder = olNameSpace.GetDefaultFolder(olFolderInbox)
Set olAppointment = olApp.CreateItem(olAppointmentItem)
‘Set details of appointment
With olAppointment
.Subject = “Discuss Whitefield Contract”
.Start = DateSerial(2007, 2, 26) + TimeSerial(9, 30, 0)
.End = DateSerial(2007, 2, 26) + TimeSerial(11, 30, 0)
.ReminderPlaySound = True
.Save
End With
‘Release object variable
Set olApp = Nothing
End Sub
The basic technique in programming another application is to create an object variable referring to 
that application. The object variable in this case is olApp. You then use olApp(as you would use the
Applicationobject in Excel) to refer to objects in the external application’s object model. In this case,
the CreateItemmethod of Outlook’s Applicationobject is used to create a reference to a new
AppointmentItemobject.
You have also created references to the NameSpaceobject and the Inbox folder. This is not because you
want to use these objects. It is a way of initializing Outlook that has been found to be effective. If you
don’t do this, errors can occur.
Because Outlook’s intrinsic constants are not available in late binding, you need to define your own con-
stants, such as olAppointmentItemhere, or substitute the value of the constant as the parameter value.
You go on to use the properties and methods of the Appointmentobject in the With...EndWithstruc-
ture. Note the times have been defined using the DateSerialand TimeSerialfunctions to avoid ambi-
guity or problems in an international context. See Chapter 25 for more details on international issues.
By declaring olAppand olAppointmentas the generic Objecttype, you force VBAto use late binding.
VBAcannot resolve all the links to Outlook until it executes the CreateObjectfunction.
The CreateObjectinput argument defines the application name and class of object to be created.
Outlookis the name of the application and Applicationis the class. Many applications allow you to
create objects at different levels in the object model. For example, Excel allows you to create WorkSheet
or Chartobjects from other applications, using Excel.WorkSheetor Excel.Chartas the input param-
eter of the CreateObjectfunction.
It is good programming practice to close the external application when you are finished with it and set
the object variable to Nothing. This releases the memory used by the link and the application.
If you run this macro, nothing will happen in Excel at all. However, open up Outlook, and in the
Calendar you will find that the appointment has been added for the morning of February 26, as shown
in Figure 19-1.
413
Chapter 19: Interacting with Other Office Applications
Figure 19-1
Early Binding
If you want to use early binding, you need to establish a reference to the type library of the external
application in your VBAproject. You do this from the VBE by clicking Tools➪References, which dis-
plays the dialog box shown in Figure 19-2.
Figure 19-2
414
Chapter 19: Interacting with Other Office Applications
You create a reference by checking the box next to the object library. Once you have a reference to an
application, you can declare your object variables as the correct type. For example, you could declare
olEntryas an AddressEntrytype, as follows:
Dim olEntry As AddressEntry
VBAwill search through the type libraries, in the order shown from the top down, to find references to
object types. If the same object type is present in more than one library, it will use the first one found.
You can select a library and click the Priority buttons to move it up or down the list to change the order
in which libraries are searched. There is no need to depend on priority, however. You can always qualify
an object by preceding it with the name of the main object in the library. For example, instead of using
AddressEntry, use Outlook.AddressEntry.
The following example uses early binding. It lists all the names of the entries in the Outlook Contacts
folder, placing them in column Aof the active worksheet. Make sure that you have created a reference to
the Outlook object library before you try to execute it, or you will get the error “User-defined type not
defined”:
Sub DisplayOutlookContactNames()
‘Example of Outlook automation using early binding
‘Lists all the Contact names from Outlook in the A column
‘of the active sheet
Dim olApp As Outlook.Application
Dim olNameSpace As Outlook.NameSpace
Dim olFolder As Outlook.Folder
Dim olAddresslist As AddressList
Dim olEntry As AddressEntry
Dim i As Long
‘Create link to Outlook Contacts folder
Set olApp = New Outlook.Application
Set olNameSpace = olApp.GetNamespace(“MAPI”)
Set olFolder = olNameSpace.GetDefaultFolder(olFolderInbox)
Set olAddresslist = olNameSpace.AddressLists(“Contacts”)
For Each olEntry In olAddresslist.AddressEntries
i = i + 1
‘Enter contacts in A column of active sheet
Cells(i, 1).Value = olEntry.Name
Next
‘Release object variable
Set olApp = Nothing
End Sub
Here, you directly declare olAppto be an Outlook.Applicationtype. The other Dimstatements also
declare object variables of the type you need. If the same object name is used in more than one object
library, you can precede the object name by the name of the application, rather than depend on the priority
of the type libraries. You did this with Outlook.NameSpaceto illustrate the point. The Newkeyword is
used when assigning a reference to Outlook.Applicationto olAppto create a new instance of Outlook.
415
Chapter 19: Interacting with Other Office Applications
The fact that you declare the variable types correctly makes VBAuse early binding. You could use the
CreateObjectfunction to create the olAppobject variable, instead of the Newkeyword, without affect-
ing the early binding. However, it is more efficient to use New.
Opening a Document in Word
If you want to open a file created in another Office application, you can use the GetObjectfunction to
directly open the file. However, it is just as easy to open an instance of the application and open the file
from the application. Another use of GetObjectis examined shortly.
The following code copies a range in Excel to the clipboard. It then starts a new instance of Word, opens
an existing Word document, and pastes the range to the end of the document. Because the code uses
early binding, make sure you establish a reference to the Word object library:
Sub CopyTableToWordDocument()
‘Example of Word automation using early binding
‘Copies range from workbook and appends it to existing Word document
Dim wdApp As Word.Application
‘Copy A1:B6 in Table sheet
ThisWorkbook.Sheets(“Table”).Range(“A1:B6”).Copy
‘Establish link to Word
Set wdApp = New Word.Application
With wdApp
‘Open Word document
.Documents.Open Filename:=”C:\VBA_Prog_Ref\Chapter19\Table.docx”
With .Selection
‘Go to end of document and insert paragraph
.EndKey Unit:=wdStory
.TypeParagraph
‘Paste table
.Paste
End With
.ActiveDocument.Save
‘Exit Word
.Quit
End With
‘Release object variable
Set wdApp = Nothing
End Sub 
If you are not familiar with the Word object model, you can use the Word macro
recorder to discover which objects, properties, and methods you need to use to per-
form a Word task that you can do manually.
416
Chapter 19: Interacting with Other Office Applications
The Newkeyword creates a new instance of Word, even if Word is already open. The Openmethod of the
Documentscollection is used to open the existing file. The code then selects the end of the document,
enters a new empty paragraph, and pastes the range. The document is then saved and the new instance
of Word is closed.
Accessing an Active Word Document 
Say you are working in Excel, creating a table. You also have Word open with a document active, into
which you want to paste the table you are creating. You can copy the table from Excel to the document
using the following code. There is no need to establish a reference to Word if you declare wdAppas an
Objecttype, because VBAwill use late binding. On the other hand, you can establish a reference to
Word, declare wdAppas a Word.Applicationtype, and VBAwill use early binding. In this example,
you are using early binding:
Sub CopyTableToOpenWordDocument()
‘Example of Word automation using late binding
‘Copies range from workbook and appends it to
‘ a currently open Word document
Dim wdApp As Word.Application
‘Copy Range A1:B6 on sheet named Table
ThisWorkbook.Sheets(“Table”).Range(“A1:B6”).Copy
‘Establish link to open instance of Word
Set wdApp = GetObject(, “Word.Application”)
With wdApp.Selection
‘Go to end of document and insert paragraph
.EndKey Unit:=wdStory
.TypeParagraph
‘Paste table
.Paste
End With
‘Release object variable
Set wdApp = Nothing
End Sub 
The GetObjectfunction has two input parameters, both of which are optional. The first parameter can
be used to specify a file to be opened. The second can be used to specify the application program to
open. If you do not specify the first parameter, GetObjectassumes you want to access a currently open
instance of Word. If you specify a zero-length string as the first parameter, GetObjectassumes you
want to open a new instance of Word.
You can use GetObjectwith no first parameter, as in the previous code, to access a current instance of
Word that is in memory. However, if there is no current instance of Word running, GetObjectwith no
first parameter causes a run-time error.
417
Chapter 19: Interacting with Other Office Applications
Documents you may be interested
Documents you may be interested