2016-12-31 23 views
1

我的電腦上安裝了Microsoft Office 365 Business,我試圖運行Access VBA來創建Excel對象。這是我訪問VBA語法我使用使用Excel 2016和後期綁定的Active X錯誤

Dim xl As Object, wb As Object, ws As Object, ch As Object 

Set xl = CreateObject("Excel.Application") 

然而,它擊中CreateObject線並引發下面的圖片,但運行Office 365個業務在我的電腦上只。如果我在運行Office 2010的計算機上運行相同的語法,它將按照它應該執行的方式執行,並創建Excel對象錯誤免費。

爲了能夠使用Microsoft Office 365 Business運行此語法,必須更改什麼?

Error Message

編輯
這是唯一的註冊表項,我看到的 - 它是接近,但不完全是在評論中指出。
Registry Key

+1

爲了使ActiveX運行「Excel.Application」,需要以下注冊表項:'HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes \ Excel.Application'。這指向一個'CLSID'。你能檢查這是否存在?對於我使用'Microsoft Office 365 ProPlus'來說,它的確如此,'CreateObject(「Excel.Application」)'工作。如果它不存在,Office重新安裝可能會有所幫助。但也許它不提供'Microsoft Office 365商業'?我還沒有找到關於此的詳細信息。也許問'微軟'? –

+0

@AxelRichter - 看我的編輯,我有一個類似的關鍵,但不完全。請指教。 –

+0

嘗試'CreateObject(「Excel.Application.16」)'。 –

回答

0

一種選擇是在嘗試呼叫CreateObject之前檢查CLSID是否存在。您可以使用OLE32.DLL功能CLSIDFromString測試它(這也是使用VBA內部的CreateObjectGetObject電話):

'Note, this is the 32bit call - use PtrSafe for 64bit Office. 
Private Declare Function CLSIDFromString Lib "ole32.dll" _ 
    (ByVal lpsz As LongPtr, ByRef pclsid As LongPtr) As Long 

您可以在一個簡單的包裝它「存在」測試是這樣的:

Private Function ClassIdExists(clsid As String) As Boolean 
    Dim ptr As LongPtr 
    Dim ret As Long 
    ret = CLSIDFromString(StrPtr(clsid), ptr) 
    If ret = 0 Then ClassIdExists = True 
End Function 

這可讓您之前測試類您嘗試創建他們(使用錯誤處理程序來捕獲壞的CLSID避免):

Dim xl As Object 
If ClassIdExists("Excel.Application") Then 
    Set xl = CreateObject("Excel.Application") 
ElseIf ClassIdExists("Excel.Application.16") Then 
    Set xl = CreateObject("Excel.Application.16") 
Else 
    MsgBox "Can't locate Excel class." 
End If 
+0

這不會回答問題**爲什麼**註冊表項HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes \ Excel.Application'不存在。通常**如果Office版本支持「COM」自動化,則兩個**註冊表項應該存在。 'Excel.Application'是通用的,'Excel.Application.16'('Excel.Application。[nn]')指向當前的Office版本。因此,儘管您的答案有效,但我認爲這樣做通常不會太好,因爲您必須檢查所有可能的版本號。 –