PDA

Click to See Complete Forum and Search --> : [FAQ's: OD] How do I programmatically determine the version of an Office App?


RobDog888
Oct 25th, 2005, 09:48 PM
When writting programs that need to support multiple versions of an Office app you need a way to evaluate the installed app. There are only two methods to obtain the version/build information for all Office apps. Once you have the version info you can branch out and perform vertain functions that are only supported in that version or set a flag variable to use throughout your app to handle executing certain lines of code or not.


1.) The code in Command1_Click procedure is only for Outlook and InfoPath applications. In these two apps the .Version information contains the Major, Minor, Revision and Build (14.0.0.6359).


2.) The code in command2_Click procedure covers the rest of the Office applications. The .Version information only contains the Major and Minor numbers (14.0).


Visual Basic 6.0 Early Binding Code Example:
Option Explicit
'Add a reference to your desired office app
'MS [inset app name here] xx.0 Object Library
Private Sub Command1_Click()
'Format for Outlook and InfoPath (Outlook shown)
'Requires trimming of the build info
Dim oApp As Outlook.Application
Dim sBuild As String
Dim sVersion As String
Set oApp = New Outlook.Application
'Get major build only to make it easier to determine version
sBuild = Left$(oApp.Version, InStr(1, oApp.Version, ".") + 1)
Select Case sBuild
Case "7.0"
sVersion = "97" 'Outlook
Case "8.0"
sVersion = "98" 'Outlook
Case "9.0"
sVersion = "2000" 'Outlook
Case "10.0"
sVersion = "2002" 'Outlook
Case "11.0"
sVersion = "2003" 'Outlook & InfoPath
Case "12.0"
sVersion = "2007" 'Outlook & InfoPath
Case "14.0"
sVersion = "2010" 'Outlook
Case Else
sVersion = "Too Old!"
End Select
MsgBox "Outlook Build: " & oApp.Version & vbNewLine & "Outlook Version: " & sVersion, _
vbOKOnly + vbInformation, "Office Version"
oApp.Quit
Set oApp = Nothing
End Sub

Private Sub Command2_Click()
'Format for most other Office Apps
'MS Access used for this example
Dim oApp As Access.Application
Dim sVersion As String
Set oApp = New Access.Application
Select Case oApp.Version
Case "7.0"
sVersion = "95"
Case "8.0"
sVersion = "97"
Case "9.0"
sVersion = "2000"
Case "10.0"
sVersion = "2002"
Case "11.0"
sVersion = "2003"
Case "12.0"
sVersion = "2007"
Case "14.0"
sVersion = "2010"
Case Else
sVersion = "Too Old!"
End Select
MsgBox "Outlook Build: " & oApp.Version & vbNewLine & "Outlook Version: " & sVersion, _
vbOKOnly + vbInformation, "Office Version"
oApp.Quit
Set oApp = Nothing
End Sub

Visual Basic 6.0 Late Binding Code Example:
Option Explicit
'Excel example being used
Private Sub Form_Load()

On Error GoTo MyError

Dim oApp As Object
Dim sVersion As String
Set oApp = GetObject(, "Excel.Application")
If TypeName(oApp) = "Nothing" Then
Set oApp = CreateObject("Excel.Application")
End If
Select Case Left$(oApp.Version, InStr(1, oApp.Version, ".") + 1)
Case "8.0"
sVersion = "97"
Case "9.0"
sVersion = "2000"
Case "10.0"
sVersion = "2002"
Case "11.0"
sVersion = "2003"
Case "12.0"
sVersion = "2007"
Case "14.0"
sVersion = "2010"
Case else
sVersion = "Too Old!"
End Select
MsgBox "Excel version: " & sVersion
Exit Sub
MyError:
If Err.Number = 429 Then
Resume Next
Else
MsgBox Err.Number & " - " & Err.Description
End If
End Sub

RobDog888
Aug 23rd, 2006, 05:07 PM
VB.NET 2003 Code Example:Option Explicit On
Option Strict On
'Add a reference to your desired Office App -
'MS [inset app name here] xx.0 Object Library
'MS Word xx.0 Object Library
'MS Word used in this code example
'Add the imports statement for the .Interop class (PIA)
Imports Microsoft.Office.Interop

Public Class Form1

Inherits System.Windows.Forms.Form

"Windows Form Designer generated code"

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim oApp As Word.Application
Dim sVersion As String
oApp = DirectCast(CreateObject("Word.Application"), Word.Application)
Select Case oApp.Version
Case "7.0"
sVersion = "95"
Case "8.0"
sVersion = "97"
Case "9.0"
sVersion = "2000"
Case "10.0"
sVersion = "2002"
Case "11.0"
sVersion = "2003"
Case "12.0"
sVersion = "2007"
Case "14.0"
sVersion = "2010"
Case Else
sVersion = "Too Old!"
End Select
MessageBox.Show("Word Build: " & oApp.Version & Environment.NewLine & "Word Version: " & sVersion, _
"Office Version", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
oApp.Quit(False)
oApp = Nothing
End Sub

End Class

RobDog888
Aug 23rd, 2006, 05:07 PM
C# 2003 Code Example:
'Add a reference to your desired Office App -
'MS [inset app name here] xx.0 Object Library
'MS Word xx.0 Object Library
'MS Word used in this code example
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using Microsoft.Office.Interop;

namespace CSharp___Word_Version
{

public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Button button1;

private System.ComponentModel.Container components = null;

public Form1()
{
/// <summary>
/// Required for Windows Form Designer support
/// <summary>
InitializeComponent();
}
"Windows Form Designer generated code"
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
private void button1_Click(object sender, System.EventArgs e)
{
string sVersion = string.Empty;
Microsoft.Office.Interop.Word.Application oApp = new Microsoft.Office.Interop.Word.Application();
oApp.Visible = false;
switch (oApp.Version.ToString())
{
case "7.0":
sVersion = "95";
break;
case "8.0":
sVersion = "97";
break;
case "9.0":
sVersion = "2000";
break;
case "10.0":
sVersion = "2002";
break;
case "11.0":
sVersion = "2003";
break;
case "12.0":
sVersion = "2007";
break;
case "14.0":
sVersion = "2010";
break;
default:
sVersion = "Too Old!";
break;
}
MessageBox.Show("Word Build: " + oApp.Version + Environment.NewLine + "Word Version: " + sVersion,
"Office Version",MessageBoxButtons.OK, MessageBoxIcon.Information);
object a = (object) false;
object b = (object) 1;
oApp.Quit(ref a, ref b, ref a);
oApp = null;
}
}
}