2016-12-31 21 views
1

私はMicrosoft Office 365 Businessを私のPCにインストールしていて、Access VBAを実行してExcelオブジェクトを作成しようとしています。これは私がExcel 2016と遅いバインディングでアクティブXエラー

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

Set xl = CreateObject("Excel.Application") 

を使用しています私のアクセスVBAの構文は、しかし、それはCreateObjectラインをヒットし、下の画像をスローしますが、はONLY私のPCにはOffice 365社のビジネスを実行しています。 Office 2010を実行しているコンピュータでこの同じ構文を実行すると、それは正確に実行され、Excelオブジェクトエラーが発生しなくなります。

Microsoft Office 365 Businessでこの構文を実行するには、私は何を変更する必要がありますか?それは近いですが、ない正確なコメントで述べたもの -

Error Message

EDIT
これは私が見る唯一のレジストリキーです。
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 Business」と一緒に提供されていないのかもしれません。私はこれに関する詳細な情報は見つけていません。多分、「Microsoft」と尋ねるでしょうか? –

+0

@AxelRichter - 私の編集を参照してください、私はキーが似ていますが、正確にはありません。お知らせ下さい。 –

+0

'CreateObject(" Excel.Application.16 ")'を試してください。 –

答えて

0

1つのオプションは、CLSIDがCreateObjectを呼び出そうとする前に存在しているかどうかを確認することです。あなたは(これはCreateObjectGetObject呼び出しのために内部的にVBAでも使用されている)、それをテストするためにOLE32.DLL機能CLSIDFromStringを使用することができます。

'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 

あなたはシンプルでそれをラップすることができ、このようなテスト何かを「存在」:

これは、あなたがそれらを作成しよう前のクラス をテストすることができます(と悪いのCLSIDをキャッチするエラーハンドラを使用して回避)
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 

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のバージョンを指しています。あなたの答えは機能しますが、これを行うことは、可能なすべてのバージョン番号をチェックする必要があるため、一般的には良い方法ではないと思います。 –

関連する問題