「ActiveXコンポーネントはオブジェクトを作成できません。」の原因

中級VBA

はじめに

 「ActiveXコンポーネントはオブジェクトを作成できません。」というエラーは、外部に定義しているはずのオブジェクトを呼び出せなかった事が原因で発生します。
 
 原因としては主に2種類が考えられると思います。
 1つは参照するコンポーネントの書き間違い。
 もう一つは、参照すべきコンポーネントを見つける事が出来なかった場合です。

エラーを再現する

 下記のコードは FileSystemObject を呼び出して使用する例です。
 このコードで、”Scripting.FileSystemObject”を書き間違えると、「ActiveXコンポーネントはオブジェクトを作成できません。」というエラーが発生します。
 書き間違いを訂正すれば問題ないので深刻なエラーではありません。

Sub searchFileForFSO()
    Dim FSO As Object
    Dim myFile As Object
    Dim myPath As String

    myPath = "C:\tools\"
    
    Set FSO = CreateObject("Scripting.FileSystemObject")
    
    For Each myFile In FSO.GetFolder(myPath).Files
        Debug.Print myFile      'フルパス名が取り出せる
        'Debug.Print myFile.Name     'ファイル名だけ取り出す
    Next myFile
    
    Set FSO = Nothing
End Sub

 次のコードはあり得ないコンポーネントを指定しています。
 当然エラーとなります。

Sub testActiveXError()
    Dim hoge As Object
    Set hoge = CreateObject("hogehoge")
    
    Debug.Print hoge.Name
End Sub

 CreateObjectを実行して失敗すると発生するエラーである事がわかります。

 問題は、参照すべきコンポーネントを見つける事が出来なかった場合です。市販のアプリなどでは専用のコンポーネントを使用するようなケースがあります。実行ファイル(ブック)のみを別のPCに持ち込んで利用するような場合、それまで動いていたプログラムがこのエラーで中断される可能性があります。

 また、同じく参照を失敗する例として現行のバージョンより古いファイル(ブック)をPC持ち込んで実行しようとしたり、また逆に新しいバージョンのExcelで作ったプログラムを古いバージョンのExeclで実行するような場合、参照が上手くいかない場合があるでしょう。

 このようなケースでは、利用するコンポーネントが現在利用している環境と合致しているかを確認しなければなりません。
 
 現在の環境とコンポーネントの呼び出しが一致しない場合は、そのコンポーネントで利用している部分を適切に変更する必要があります。

最後に

 もし、「ActiveXコンポーネントはオブジェクトを作成できません。」というエラーが出た場合は、まずコンポーネントの書き間違えがないか確認しましょう。
 もし、書き間違えではない場合には、固有のコンポーネントを使用していたり、バージョンに合ったコンポーネントを使用しているかを確認します。
 固有のコンポーネントの場合は、適切場所にインストールする事で改善できるでしょう。
 バージョン違いによるコンポーネントの場合は、プログラムの訂正が必要になるでしょう。

タイトルとURLをコピーしました