Microsoft Knowledge Base Email Alertz

KBAlertz.com: (304661) - When you automate an application such as a Microsoft Office application, the calls to the properties and methods of the Office application's objects must be connected in some way to those objects. The process of connecting property and method calls to...

Receive Microsoft Knowledge Base articles by E-Mail?

Every night we scan the Microsoft Knowledge Base. If technologies you're interested in are updated, we'll send you an e-mail. You only get one e-mail a day, and only when new articles are added.

Click here to create a
FREE account
Already have an account?
[Click here to Login]

Search KbAlertz

Advanced Search

Webmasters
Put kbAlertz on your website.
[ Click Here for more! ]





ASP.NET 3.5 Web Hosting with Windows 2008 and SQL 2008: Click Here!
Discount ASP.NET Hosting
ASP.NET 2.0 and 3.5
Windows2008 and SQL2008
US and UK Hosting
The ad says 3 - but KBAlertz referrals get
** SIX MONTHS FREE **


Bug Tracking Software
For bug tracking software or defect tracking software or issue tracking software, visit Axosoft.


Community Site



We Send hundreds of thousands of emails using ASP.NET Email



Expert Web Design & Graphic Design
Design44.com

ASP.NET 3.5 Web Hosting with Windows 2008 and SQL 2008: Click Here!
Discount ASP.NET Hosting
ASP.NET 2.0 and 3.5
Windows2008 and SQL2008
US and UK Hosting
The ad says 3 - but KBAlertz referrals get
** SIX MONTHS FREE **




Mentioned In








Microsoft Knowledge Base Article

This article contents is Microsoft Copyrighted material.
©2005-©2007 Microsoft Corporation. All rights reserved. Terms of Use | Trademarks




Article ID: 304661 - Last Review: January 17, 2007 - Revision: 8.3

How To Use Visual Basic .NET for Binding for Office Automation Servers

This article was previously published under Q304661

On This Page

SUMMARY

When you automate an application such as a Microsoft Office application, the calls to the properties and methods of the Office application's objects must be connected in some way to those objects. The process of connecting property and method calls to the objects that implement those properties and methods is commonly called binding. In Visual Basic .NET, the two types of binding that are available are early binding and late binding. The type of binding you choose can affect many aspects of your program, including performance, flexibility, and maintainability.

This step-by-step article explains and compares early and late binding for Visual Basic .NET Automation clients and provides code samples that demonstrate both types of binding.

Early Binding

With early binding, Visual Basic .NET uses type information that is available about the Office application in question to bind directly to the methods or properties that it needs to use. The compiler can perform type and syntax checks to ensure that the correct number and type of parameters are passed to the method or property, and that the returned value will be of the expected type. Because less work is required at run time to make a call to a property or method, early binding is sometimes faster; however, although early binding may be faster, performance differences when compared to late binding are often negligible.

Early binding does have the minor disadvantage that it can introduce possible version compatibility issues. For example, suppose that an Automation server such as Microsoft Excel 2002 introduces a new method or property that was unavailable in Excel 2000, or makes a change to an existing property or method. These changes may alter the binary layout of the object and cause problems with a Visual Basic .NET application that uses the Excel 2002 type information to automate Excel 2000. To avoid this problem with early binding, it is generally recommended that you use the type information for the earliest version of the Office application that you wish to support when you develop and test your Automation client.

The following steps demonstrate how to build an Automation client that uses early binding. Note that, as the steps illustrate, early binding requires you to reference the type library for the Automation client.

Create an Automation Client That Uses Early Binding

  1. Start Microsoft Visual Studio .NET. On the File menu, click New and then click Project. Select Windows Application from the Visual Basic .NET Projects types. Form1 is created by default.
  2. Add a reference to the Microsoft Excel Object Library. To do this, follow these steps:
    1. On the Project menu, click Add Reference.
    2. On the COM tab, locate theMicrosoft Excel Object Library, and then click Select.

      Note Office 2003 includes Primary Interop Assemblies (PIAs). Office XP does not include PIAs, but they can be downloaded. For additional information about Office XP PIAs, click the article number below to view the article in the Microsoft Knowledge Base:
      328912  (http://kbalertz.com/Feedback.aspx?kbNumber=328912/EN-US/ ) INFO: Microsoft Office XP PIAs Are Available for Download
    3. Click OK in the Add References dialog box to accept your selections.
  3. On the View menu, select Toolbox to display the Toolbox, and add a button to Form1.
  4. Double-click Button1. The code window for the Form appears.
  5. In the code window, replace the following code
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    
    End Sub
    						
    with:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    	Dim objApp As Excel.Application
            Dim objBook As Excel._Workbook
            Dim objBooks As Excel.Workbooks
            Dim objSheets As Excel.Sheets
            Dim objSheet As Excel._Worksheet
            Dim objRange As Excel.Range
    
            ' Instantiate Excel and start a new workbook.
            objApp = New Excel.Application()
            objBooks = objApp.Workbooks
            objBook = objBooks.Add
            objSheets = objBook.Worksheets
            objSheet = objSheets.Item(1)
    
            objRange = objSheet.Range("A1")
    
            'Set the range value.
            objRange.Value(Excel.XlRangeValueDataType.xlRangeValueDefault) = "Hello, World!"
    
    
            'Return control of Excel to the user.
            objApp.Visible = True
            objApp.UserControl = True
        End Sub
    					
  6. Add the following directive at the top of code window:
    	Imports Excel = Microsoft.Office.Interop.Excel
     
    					

Late Binding

In contrast to early binding, late binding waits until run time to bind property and method calls to their objects. To do this, the target object must implement a special COM interface: IDispatch. The IDispatch::GetIDsOfNames method allows Visual Basic .NET to interrogate an object about what methods and properties it supports, and the IDispatch::Invoke method then allows Visual Basic .NET to call those methods and properties. Late binding in this fashion has the advantage of removing some of the version dependencies that are inherent with early binding. However, late binding has the disadvantages of removing compile-time checks on the integrity of automation code, as well as not providing Intellisense features that can provide clues to correct calls to methods and properties.

To use late binding in Visual Basic .NET, change the declarations of the objects in your automation code from their early bound types, such as Excel.Application to Object.

Create an Automation Client That Uses Late Binding

  1. Start Microsoft Visual Studio .NET. On the File menu, click New and then click Project. Select Windows Application from the Visual Basic .NET Projects types. Form1 is created by default.
  2. On the View menu, select Toolbox to display the Toolbox, and add a button to Form1.
  3. Double-click Button1. The code window for the Form appears.
  4. In the code window, replace the following code
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    
    End Sub
    						
    with:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim objApp As Object
        Dim objBook As Object
        Dim objBooks As Object
        Dim objSheets As Object
        Dim objSheet As Object
        Dim range As Object
    
        ' Instantiate Excel and start a new workbook.
       objApp = CreateObject("Excel.Application")
        objBooks = objApp.Workbooks
        objBook = objBooks.Add
        objSheets = objBook.Worksheets
        objSheet = objSheets.Item(1)
    
        range = objSheet.Range("A1")
    
        'Set the range value.
        range.Value = "Hello, World!"
    
        'Return control of Excel to the user.
        objApp.Visible = True
        objApp.UserControl = True
    End Sub
    					

REFERENCES

For more information, visit the following Microsoft Web site:
Microsoft Office Development with Visual Studio
http://msdn2.microsoft.com/en-us/library/aa188489(office.10).aspx (http://msdn2.microsoft.com/en-us/library/aa188489(office.10).aspx)
For additional information about binding, click the article numbers below to view the articles in the Microsoft Knowledge Base:
245115  (http://kbalertz.com/Feedback.aspx?kbNumber=245115/EN-US/ ) INFO: Using Early Binding and Late Binding in Automation
244167  (http://kbalertz.com/Feedback.aspx?kbNumber=244167/EN-US/ ) INFO: Writing Automation Clients for Multiple Office Versions
247579  (http://kbalertz.com/Feedback.aspx?kbNumber=247579/EN-US/ ) INFO: Use DISPID Binding to Automate Office Applications Whenever Possible

APPLIES TO
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft .NET Framework Class Libraries 1.0
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Office PowerPoint 2003
  • Microsoft PowerPoint 2002 Standard Edition
  • Microsoft Word 2002
Keywords: 
kbpia kbhowtomaster KB304661
       

Community Feedback System

Very often, it takes hours to solve a problem. Very often, you've looked high and low, and have tried a lot of solutions. When you finally found it, chances are, it was because someone else helped you. Here's your chance to give back. Use our community feedback tool to let others know what worked for you and what didn't.

Please also understand that the community feedback system is not warranted to be correct, it's simply a system that we've built to let people try and help each other. If something in a feedback response doesn't make sense to you, or you're not comfortable making changes that the feedback talks about (like registry edits), please consult a professional.

Thank you for using kbAlertz.com Feedback System.

-- Scott Cate

Be the first to leave feedback, to help others about this knowledge base article.

(Optional) Name

(Optional) Public URL Or Email

Comments
No HTML -- Text Only Please