Verificando se um aplicativo Office esta instalado


Pode parecer uma coisa inútil , mas um dia ( um belo dia ) você vai precisar saber se um aplicativo office ( Word , Excel , Access ,...) está instalado na máquina do cliente.  "Para que eu vou querer saber isso ???" você pode estar se perguntando. Ora , se você for usar automação OLE ( diga-se VBA ) , para usar o Word como um processador de texto ou o Excel como uma planilha de cálculos eles deverão estar instalados no seu cliente e você vai precisar saber...

Bem , deixando a polêmica de lado vamos mostrar como saber se os aplicativos office estão instalados ou não. Para isto iremos usar umas API´s e pronto:

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

Private Declare Function RegQueryValueEx Lib "advapi32" Alias "RegQueryValueExA" _
(ByVal hKey As Long, ByVal lpValueName As String, lpReserved As Long, lptype As _
Long, lpData As Any, lpcbData As Long) As Long

Private Declare Function RegCloseKey& Lib "advapi32" (ByVal hKey&)

Private Const REG_SZ = 1
Private Const REG_EXPAND_SZ = 2
Private Const ERROR_SUCCESS = 0

Insira o código abaixo no formulário:

Public Function GetRegString(hKey As Long,strSubKey As String, strValueName As String) As String

Dim strSetting As String
Dim lngDataLen As Long
Dim lngRes As Long

If RegOpenKey(hKey, strSubKey, lngRes) = ERROR_SUCCESS Then

 strSetting = Space(255)
 lngDataLen = Len(strSetting)

If RegQueryValueEx(lngRes,  strValueName, ByVal 0,REG_EXPAND_SZ, ByVal strSetting, lngDataLen) = ERROR_SUCCESS Then
  If lngDataLen > 1 Then
     GetRegString = Left(strSetting, lngDataLen - 1)
  End If
End If

If RegCloseKey(lngRes) <> ERROR_SUCCESS Then
   MsgBox "RegCloseKey Failed: " & strSubKey, vbCritical
End If

End If

End Function

Public Function IsAppPresent(strSubKey$, strValueName$) As Boolean
 IsAppPresent = CBool(Len(GetRegString(HKEY_CLASSES_ROOT,  strSubKey, strValueName)))
End Function

E no evento click do botão de comando ( command1 ) insira o código abaixo:

Private Sub command1_Click()
Dim mensagem As String

Label1 = "Access " & _
IIf(IsAppPresent("Access.Database\CurVer", ""), "Instalado", "Não instalado")

Label2.Caption = "Excel " & _
IIf(IsAppPresent("Excel.Sheet\CurVer", ""), "Instalado", "Não instalado")

Label3.Caption = "PowerPoint " & _
IIf(IsAppPresent("PowerPoint.Slide\CurVer", ""), "Instalado", "Não instalado")

Label4.Caption = "Word " & _
IIf(IsAppPresent("Word.Document\CurVer", ""), "Instalado", "Não instalado")

End Sub

Execute o aplicativo e clique no botão de comando: No meu caso o resultado é:

Sem mais nada a declarar...(Aguarde ,em breve vamos dar um curso sobre VBA - básico)