Getting the version of Office (Access), if installed

How can I get the version of an installed MS Office, if it exists, that is...

Up to now I'm checking the following reg key exists, assuing this will only be there if office is installed:

I've seen some other answers to this question in PAQs, but I'm not going to accept those answers if they are re-submitted for my question.

(assuming there's already a this line of code: "Dim A as Access.Application")

Checking A.Version doesnt work - there is no version property of that object.

Checking A.CurrentDB.Version - nope!, there has to be a database open and I can't open it if they have Access 97 (which is why I want this version checker :)

I think that's all... thanks! :)
Who is Participating?
bruintjeConnect With a Mentor Commented:
don't know if you seen this one already i didn't take it from the PAq's because i don't use them anyway ;)

From Jake Marx

An alternative would be to look at the CurVer registry key for Access.  Here's some code that should get the version number from the registry for you.  If the function fails (most likely because the user doesn't have Access installed), it will return 0.

Public Const HKEY_CLASSES_ROOT = &H80000000
Public Const ERROR_SUCCESS = 0&
Public Const gsACCESS_KEY As String = "Access.Application\CurVer"
Public Const gsACCESS_VALUE As String = vbNullString

Public Declare Function RegCloseKey Lib "advapi32.dll" _
 (ByVal hKey As Long) As Long

Public Declare Function RegOpenKey Lib "advapi32.dll" _
 Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey _
 As String, phkResult As Long) As Long

Public Declare Function RegQueryValueEx Lib "advapi32.dll" _
 Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName _
 As String, ByVal lpReserved As Long, lpType As Long, lpData _
 As Any, lpcbData As Long) As Long

Public Function nGetAccessVersion() As Integer
    Dim hCurrKey As Long
    Dim lResult As Long
    Dim lValType As Long
    Dim lValBufferSize As Long
    Dim sValue As String
    Dim nNullCharPos As Integer

    lResult = RegOpenKey(HKEY_CLASSES_ROOT, gsACCESS_KEY, _
    lResult = RegQueryValueEx(hCurrKey, gsACCESS_VALUE, _
     0&, lValType, ByVal 0&, lValBufferSize)

    If lResult = ERROR_SUCCESS Then
        sValue = Space$(lValBufferSize)
        lResult = RegQueryValueEx(hCurrKey, gsACCESS_VALUE, _
         0&, 0&, ByVal sValue, lValBufferSize)
        nNullCharPos = InStr(sValue, vbNullChar)
        If nNullCharPos Then sValue = Left$(sValue, _
         nNullCharPos - 1)
        nGetAccessVersion = CInt(Right$(sValue, Len(sValue) - _
         InStrRev(sValue, ".")))
    End If
    RegCloseKey hCurrKey
End Function

Do you have VB6?
' Set a reference to MS DAO V 3.6+

' Using this option does not need to open a database

msgbox FindInstalledVersion()

4.0 = 2000
3.0 = 95/97
2.0 = Access V2
1.1 = Access V1.1
1.0 = Access V1.0

Hope this helps.........

Function FindInstalledVersion()

Dim ver$
dim tmp$
dim db=dao.database
tmp$ = App.Path + "dummy.mdb"
Set db = Workspaces(0).CreateDatabase(tmp$, dbLangGeneral)
ver$ = db.Version
set db=nothing
Kill tmp$

End Function
Build your data science skills into a career

Are you ready to take your data science career to the next step, or break into data science? With Springboard’s Data Science Career Track, you’ll master data science topics, have personalized career guidance, weekly calls with a data science expert, and a job guarantee.

dim db As DAO.database ' would be better than dim db=dao.database

Richie_SimonettiIT OperationsCommented:
maybe this could help:

Private Sub Form_Load()
On Error Resume Next
Dim a As Object
Set a = CreateObject("access.application")
If Err.Number <> 0 Then
    MsgBox "Access is not installed"
    Set a = Nothing
End If
End Sub
SiM99Author Commented:
Ive given each method a test

From inthedark's method, I get 4.0, which as he said is access 2000. That works, but I didn't want to open a database because that's extra processing time (aswell as the fact it wouldnt open in 97) so creating one will also take that extra time... if not more.

The code from Richie_Simonetti gave 3.6, and I have absolutely no idea what that would mean :)

bruintje's mention of the registry value in HKEY_CLASSES_ROOT was really what I was looking for.

Thanks for the feedback.
Sorry it took so long for me to accept an answer, havent looked at EE for a while.
Richie_SimonettiIT OperationsCommented:
Thanks for your reply. it is nice to see another comment from asker when question is finished.
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.