[FAQ's: OD] How do I programmatically determine the version of an Office App?
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:
VB Code:
Option Explicit
'Add a reference to your desired office app
'MS [i][inset app name here][/i] 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 "15.0"
sVersion = "2013" 'Outlook
Case "16.0"
sVersion = "2016" 'Outlook
Case Else
sVersion = "Undetermined!"
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 "15.0"
sVersion = "2013"
Case "16.0"
sVersion = "2016"
Case else
sVersion = "Undetermined!"
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:
VB Code:
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 "15.0"
sVersion = "2013"
Case "16.0"
sVersion = "2016"
Case else
sVersion = "Undetermined!"
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
Re: [FAQ's: OD] How do I programmatically determine the version of an Office App?
VB.NET 2003 Code Example:
VB Code:
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 "15.0"
sVersion = "2013"
Case "16.0"
sVersion = "2016"
Case else
sVersion = "Undetermined!"
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
Re: [FAQ's: OD] How do I programmatically determine the version of an Office App?
C# 2003 Code Example:
Code:
'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;
case "15.0":
sVersion = "2013";
break;
case "16.0":
sVersion = "2016";
break;
default:
sVersion = "Undetermined!";
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;
}
}
}
Re: [FAQ's: OD] How do I programmatically determine the version of an Office App?
Thank you dear RobDog888 it is very helpful :)