Om du bara undrar om Office-paketet går att automatisera i största allmänhet kan du kanske använda kod typ denna:
Public Function IsWordAvailable()
Dim dummy As Object
On Error GoTo Nope
Set dummy = CreateObject("Word.Application")
IsWordAvailable = True
Set dummy = Nothing
Exit Function
Nope:
IsWordAvailable = False
End Function
.. och motsvarande för Excel, Access .. OBS: Anropen är ganska "tunga" så du bör bara köra dem en gång tex när applikationen startar.
Om du letar efter en specifik version av Office så får du nog dyka ner i registret. LOCAL_MACHINE\Software\Microsoft\Office är ett hett tips.
Sub CheckOfficeXPInstalled()
InstallRoot = System.PrivateProfileString("", _
"HKEY_LOCAL_MACHINE\Software\Microsoft\Office\10.0\Common\InstallRoot", _
"Path")
If InstallRoot <> "" Then
MsgBox "An Office XP Family Product is installed at " & InstallRoot
End If
End Sub
Men jag får bara error hela tiden.
Jag försökte att dimma so här:
Dim System As String, InstallRoot As String
Men får "invalid qualifer" hela tiden.
Vad tror du?
Dessutom så tänker de bara på OfficeXP här, men fråga rör sig ju om Office 2000, någon skillnad?
Anledningen till att det inte funkar är att koden är VBA inte VB. Den är också specifik för XP.
Eventuellt kan du köra så här för Office 2000:
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" _
(ByVal Hkey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Const HKEY_LOCAL_MACHINE = &H80000002
Private Const HKEY_CURRENT_USER = &H80000001
Private Sub Command1_Click()
Dim keyhand As Long
r = RegOpenKey(HKEY_LOCAL_MACHINE, "SoftWare\Microsoft\Office\9.0\Access", keyhand)
If r = 0 Then
'Access 2000 är installerat.
Else
'Access 2000 är inte installerat.
End If
r = RegOpenKey(HKEY_LOCAL_MACHINE, "SoftWare\Microsoft\Office\9.0\Excel", keyhand)
If r = 0 Then
'Excel 2000 är installerat.
Else
'Excel 2000 är inte installerat.
End If
' osv osv
End Sub
Jag har ingen aning om det alltid funkar. Eller om registernycklarna alltid finns oberoende om komponenten är installerad. Du får prova.
Det ser ju bra ut, men pga att jag har OfficeXP så har jag svårt att testa. Jag skulle vilja att scriptet tog ifrån Office2000 och uppåt.
Så här har jag försökt, men det lyckas inte:
Dim keyhand As Long, r As String, strOK As Boolean, sMessage As String
strOK = False
r = RegOpenKey(HKEY_LOCAL_MACHINE, "SoftWare\Microsoft\Office\9.0\Access", keyhand) Or RegOpenKey(HKEY_LOCAL_MACHINE, "SoftWare\Microsoft\Office\10.0\Access", keyhand)
If r = 0 Then
strOK = True
sMessage = "Access OK "
'Access 2000 är installerat.
Else
'Access 2000 är inte installerat.
strOK = False
sMessage = "Ej Access "
End If
r = RegOpenKey(HKEY_LOCAL_MACHINE, "SoftWare\Microsoft\Office\9.0\Excel", keyhand) Or RegOpenKey(HKEY_LOCAL_MACHINE, "SoftWare\Microsoft\Office\10.0\Excel", keyhand)
If r = 0 Then
strOK = True
sMessage = sMessage & ",Excel OK "
'Access 2000 är installerat.
Else
'Access 2000 är inte installerat.
strOK = False
sMessage = sMessage & ",Ej Excell "
End If
If strOK = True Then
Label2.Caption = "installerade Officeapplikationer: " & sMessage
Else
MsgBox "Office är inte installerad"
Unload Me
End If
Dim keyhand As Long, r As String, t As String, strOK As Boolean, sMessage As String
strOK = False
r = RegOpenKey(HKEY_LOCAL_MACHINE, "SoftWare\\Microsoft\\Office\\9.0\\Word", keyhand)
t = RegOpenKey(HKEY_LOCAL_MACHINE, "SoftWare\\Microsoft\\Office\\10.0\\Word", keyhand)
If r = 0 Or t = 0 Then
strOK = True
sMessage = " Word 2000 "
Else
strOK = False
sMessage = " Ej Word "
End If
r = RegOpenKey(HKEY_LOCAL_MACHINE, "SoftWare\\Microsoft\\Office\\9.0\\Access", keyhand)
t = RegOpenKey(HKEY_LOCAL_MACHINE, "SoftWare\\Microsoft\\Office\\10.0\\Access", keyhand)
If r = 0 Or t = 0 Then
strOK = True
sMessage = sMessage & ", Access 2000 "
Else
strOK = False
sMessage = " Ej Access "
End If
r = RegOpenKey(HKEY_LOCAL_MACHINE, "SoftWare\\Microsoft\\Office\\9.0\\Excel", keyhand)
t = RegOpenKey(HKEY_LOCAL_MACHINE, "SoftWare\\Microsoft\\Office\\10.0\\Excel", keyhand)
If r = 0 Or t = 0 Then
strOK = True
sMessage = sMessage & ", Excel 2000 "
Else
strOK = False
sMessage = sMessage & ", Ej Excell "
End If
If strOK = True Then
Label2.Caption = "Installerade Office applikationer: " & sMessage
Else
MsgBox "Office är inte installerad"
Unload Me
End If
Tack för att du hjälpte mig
267 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2