最新版の記事はこちら
Office 2000 以降を使用されている場合は下の内容では解決しない可能性があるので、もし解決しない場合は上記リンクの最新版記事を参照ください。
今回は、表題の通り複数の異なるOfficeバージョン環境で、AccessからExcelを扱う場合における「Microsoft Excel . Object Library」(以下、Excel)参照不可問題への対応について書いていきます。
Excel参照不可問題の解消の流れとしては、
- 参照設定しているライブラリ一覧から、参照不可になっているオブジェクトの参照を解除。
- 「Microsoft Excel *.* Object Library」の参照を行う。
となります。
1.については、References.Remove メゾットを使用することで、オブジェクトの参照を解除することができます。
2.については、References.AddFromFile メゾット、または、References.AddFromGuid メゾットを使用することで参照が可能となります。
しかしながら、References.AddFromFile メゾットの場合、引数に絶対パスを設定する必要があるので、インストール環境によっては使用できない可能性があり、必然と References.AddFromGuid メゾットを使うことになります。
References.AddFromGuid メゾットの引数には3つあり、全て設定します。
- GUID
- メジャーバージョン
- マイナーバージョン
メジャーバージョンとマイナーバージョンはOfficeのバージョン(Office 2007,Office 2010 等)で変わります。
GUIDはソフトウェア(Excel ,Outlook 等)で変わってきます。
いずれの情報も下記のプログラムで調べることが可能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Sub GuidCheck() Dim Ref As Reference For Each Ref In References Debug.Print "Library : " & Ref.Name & vbLf & _ "GUID : " & Ref.Guid & vbLf & _ "Major version : " & Ref.Major & vbLf & _ "Minor version : " & Ref.Minor & vbLf & vbLf Next End Sub |
今までの情報をもとに、参照不可になっているライブラリの参照を解除し、「Microsoft Excel . Object Library」の参照を行うプログラムを作成しました。
エラーが検出された場合は、エラーの内容を表示しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
Private Const ExcelGuid As String = "{00020813-0000-0000-C000-000000000046}" Sub RefCheck() On Error GoTo Err: Dim Ref As Reference For Each Ref In References '参照不可 If Ref.IsBroken = True Then References.Remove Ref End If Next 'Officeのバージョン Select Case CLng(Application.Version) Case 16: Set Ref = References.AddFromGuid(ExcelGuid, 1, 9) 'Office 2016 Case 15: Set Ref = References.AddFromGuid(ExcelGuid, 1, 8) 'Office 2013 Case 14: Set Ref = References.AddFromGuid(ExcelGuid, 1, 7) 'Office 2010 Case 12: Set Ref = References.AddFromGuid(ExcelGuid, 1, 6) 'Office 2007 End Select MsgBox "正常", vbInformation Exit Sub Err: MsgBox Err.Description, vbExclamation End Sub |
とりあえず動けばよいという方にはこちらの簡易版を。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
Private Const ExcelGuid As String = "{00020813-0000-0000-C000-000000000046}" Sub RefCheck() On Error GoTo Err: Dim Ref As Reference For Each Ref In References '参照不可 If Ref.IsBroken = True Then References.Remove Ref End If Next Err: On Error Resume Next Set Ref = References.AddFromGuid(ExcelGuid, 1, 9) 'Office 2016 Set Ref = References.AddFromGuid(ExcelGuid, 1, 8) 'Office 2013 Set Ref = References.AddFromGuid(ExcelGuid, 1, 7) 'Office 2010 Set Ref = References.AddFromGuid(ExcelGuid, 1, 6) 'Office 2007 End Sub |
今回はここまで。
---コメント---