webForumDet fria alternativet

Finns Office 200 installerat...

.NET

6 svar · 293 visningar · startad av saw

Medlem sedan mars 20011 880 inlägg
Frågan#1

Någon som har en kodsnut som kan kontrollera om:

1. Office 2000 är installerad.
2. Isf är Word, Excell och Access installerad.

Vore väldigt tacksam för hjälp

Medlem sedan juni 20022 599 inlägg
#2

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.

Står lite här: http://www.microsoft.com/office/ork/xp/journ/prog0001.htm (XP iofs).

Medlem sedan feb. 200112 078 inlägg
#3

Office 200? ;)

Jaja, jag vet. :OO

Medlem sedan mars 20011 880 inlägg
#4

Det jag hittar på microsofts sida är:

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?

Medlem sedan juni 20022 599 inlägg
#5

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.

Medlem sedan mars 20011 880 inlägg
#6

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

Vad tror du?

Medlem sedan mars 20011 880 inlägg
#7

Jag kom på det själv:

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
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)