none
Excelがうまく起動できない RRS feed

  • 質問


  • いつもお世話になっております。
    2台のPCで、違う結果が出て困っています。

    以下のプログラムで、
    PC1ではエクセルファイル開く→セル内容変更→終了の全てが成功し、
    PC2では「xlBooks = xlApp.Workbooks」の所でエラーが出ます。

    *******************************************************************

    Imports Microsoft.Office.Interop

    Sub エクセル処理()

    '==================  起動時の処理  ===================  
    Dim xlApp As New Excel.Application
    Dim xlBooks As Excel.Workbooks
    xlBooks = xlApp.Workbooks
    Dim xlFilePath As String = "C:\FAX送信用紙.xls"  '既存のファイルを開く
    Dim xlBook As Excel.Workbook = xlBooks.Open(xlFilePath)
    Dim xlSheets As Excel.Sheets = xlBook.Worksheets
    Dim xlSheet As Excel.Worksheet = CType(xlSheets.Item(1), Excel.Worksheet)
    xlApp.Visible = True'Excelを表示(必ずしも表示しなくてもよい)
    '====================== 起動処理ここまで ===============

    '==================  データの入力処理  ==================  
    xlBook.Worksheets("Sheet1").Activate()
    xlBook.Worksheets("Sheet1").Range("A1").Value = "123456"
    '==================  データの入力処理ここまで  ==================  

    以下、終了処理等

    End Sub

    *******************************************************************

    エラー内容は、

    型 'System.InvalidCastException' のハンドルされていない例外が
    TCI電話帳.exe で発生しました
    追加情報:型 'Microsoft.Office.Interop.Excel.ApplicationClass' の
    COM オブジェクトをインターフェイス型
    'Microsoft.Office.Interop.Excel._Application' にキャストできません。
    IID{000208D5-0000-0000-C000-000000000046}' が指定されたインターフェイスの
    COM コンポーネント上での QueryInterface 呼び出しのときに次のエラーが発生
    したため、この操作に失敗しました: ライブラリは登録されていません。
    (HRESULT からの例外:0x8002801D(TYPE_E_LIBNOTREGISTERED))

    *******************************************************************

    環境は、

    PC1→富士通 FMVD04001
    Windows7 Professional SP1 32bit、
    Office2013 - Excel2013 32bit
    Visual Studio Express 2013
    VS2013の参照設定:Interop.Microsoft.Office.Interop.Excel  バージョン 1.7.0.0
    対象のエクセルファイル「FAX送信用紙.xls」は、このPCで生成したものです。

    PC2→Surface Pro 3
    Windows8.1 Pro 64bit、
    Office2013 - Excel2013 32bit
    Visual Studio Express 2013
    VS2013の参照設定:(一覧に無かったのでPC1から
    「Interop.Microsoft.Office.Interop.Excel.dll(1.7.0.0)」を
    コピーして追加で参照設定済み)

    *******************************************************************

    regedit.exeを起動して検索しても、両方のPCで
    000208D5-0000-0000-C000-000000000046配下TypeLibのVersion1.8となっている
    ものしか存在していません。

    どちらもPCも、Office2013が初めから組み込まれた状態で購入し、
    次にMicrosoft Access 2000をインストールしています。
    PC1では更にMicrosoft Visio2003をインストールしています。

    TCI電話帳.exeが32bitと64bitモード、
    どちらで動作しているかについてですが、
    TextBox1.Text = Environment.Is64BitProcess
    で調べるとFalseと出たので32bitで動作していると思います。

    参照設定にMSO.DLLを指定して
    「Microsoft Office 15.0 Object Library」を追加して
    実行してみましたが、同じアラームがでました。

    なぜ、PC2だけエラーが出るのでしょうか。

    どうか、よろしくお願いいたします。





    • 移動 星 睦美 2015年6月1日 0:32 Windows PowerShell から
    • 編集済み Mah-kun 2015年6月1日 22:32
    2015年5月30日 5:05

回答

  • 環境差であり得るとしたら、Office のエディションかなぁ。
    クイック実行(英名:Click to Run)で仮想化されている、仮想化されていないの差があるなら、何か起きても不思議ではないですが…。

    // 環境固有事象となりそうなので、解決が難しい気はしています。お急ぎの場合は有償サポートを頼ることも考えてください。

    • 回答の候補に設定 星 睦美 2015年6月5日 8:31
    • 回答としてマーク 星 睦美 2015年6月11日 6:47
    2015年6月2日 13:45
    モデレータ
  • 細かい内容まで見てませんが・・・。

    エラー内容からして COM オブジェクトのインターフェース取得不良ですから、Office バージョンの不一致が疑わしいです。

    後で Access 2000 を入れているらしいので、セットアップによる COM 登録不良も要因として考えられますね。

    コード不良も無くはないかもですが、環境不良の線が強いので解決は難しいでしょうね。

    環境不良なら Office 2013 の再セットアップで治る可能性がわずかにありますが・・・。

    • 回答の候補に設定 星 睦美 2015年6月5日 8:31
    • 回答としてマーク 星 睦美 2015年6月11日 6:47
    2015年6月2日 23:15

すべての返信

  • こんにちは。

    私はPowerShellはあまり触ったことないですが、
    カテゴリの「PowerShell」は正しいですか?

    一見するとTCI電話帳.exe というVB.NETアプリケーションのように見えますが、
    PowerShellなのかな…

    それぞれのPCのOfficeが32bitなのか64bitなのか
    OSが32bitであればWindows8.1Proでも正常終了するのか
    OSが64bitであればWindows7でも異常終了するのか

    切り分けできますか?

    あと、以下はVB.NETだという仮定で質問しますが、PC2上でTCI電話帳.exeが32bit、64bitモードどちらで動作していますか?
    VisualStudio2013(.NET4.5)以上の場合であればデフォルトは32bit優先になりますね。それに対してOfficeが64bitだと悪さをする、とかないでしょうか?
    それが原因かどうかまでは、私の知識では断言できないのですが、情報の整理ということも兼ねて確認してみてください。

    最後に。そもそも、PowerShellなので私が言っていることは検討違いだとしたら申し訳ないです。
    2015年5月30日 6:55
    モデレータ
  • Mah-kun さま よろしく。

    コードの記述が VB 系になっている点と、エラーに .exe とある事から、VB 系として以下を書きます。

    Tak1wa さまもお書きになっていますが、ターゲットが AnyCPU か x86 かによって異なりますね。
    dll を単純にコピーされた様に読み取れますし、そもそも、レジストリに登録が必要みたいですね。
    x86 の dll を単純に x64 上にコピーすればいいと言うものではありませんね。
    システムに応じた dll を組み込み、環境を整える上では、 インストールプログラムを作って、
    インストローラーに登録を任せる手もありますね。

    尚、手動で、修復を行う場合は以下(エラーの修復方法 の章)が参考になるかも知れません。

    但し、これは、適合する dll が選ばれている場合ですね。

    http://www.solvusoft.com/ja/files/%E4%B8%8D%E8%B6%B3-%E3%81%8C%E8%A6%8B%E3%81%A4%E3%81%8B%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93-%E3%82%A8%E3%83%A9%E3%83%BC/dll/windows/windows-software-developer/excel/interop-microsoft-office-interop-excel-dll/

    2015年5月30日 9:32
  • 揚げ足取りになるようで申し訳ないですが、Microsoft.Office.Interop.Excel.dll は regsvr32 が使える DLL ではありません。
    (たぶん、そのページは適当に自動生成されているとか、使い回されているとか、信頼の置けないコンテンツだと思います)

    2015年5月30日 23:03
    モデレータ
  • "Microsoft Excel 14.0 Object Library" は Excel 2010 を指しているはずですが、なぜその話が出てきているのでしょうか。
    Excel 2013 なのだから、15.0 側を参照するのが筋なはず。

    ただ、これで解決しない可能性もそれなりにありそうなので、すでに言われているように Office は 32bit or 64bit のどちらなのかといったあたりもはっきりさせていただきたいです。

    2015年5月30日 23:09
    モデレータ
  • Azulean さま ご指摘ありがとうございました。

    確認せず、投稿してしまいました。  参考になりました。

    2015年5月31日 9:33
  • 皆様、回答ありがとうございます。

    カテゴリを間違えて投稿しています。
    「Windows Powershell」ではなく正しくは「VB.NET」です。
    申し訳ございません。

    PC1のOffice2013は32bitでした。
    PC2はこれから確認します。

    32bit、64bitモードどちらで動作しているのか、
    参照設定にMicrosoft Excel 15.0 Object Libraryがない問題、
    などをこれから確認します。

    2015年5月31日 22:50
  • フォーラム オペレーターの星 睦美です。
    Mah-kun さん、今回の質問はVisual Basic フォーラムに移動させていただきました。

    質問の解決に役立つ回答がありましたら、投稿者からの[回答としてマーク] をお願いいたします。

    フォーラム オペレーター 星 睦美 - MSDN Community Support

    2015年6月1日 0:39

  • PC1のOffice2013は32bitでした。
    PC2のOffice2013も32bitでした。

    TCI電話帳.exeが32bitと64bitモード、
    どちらで動作しているかについてですが、
    TextBox1.Text = Environment.Is64BitProcess
    で調べるとFalseと出たので32bitで動作していると思います。

    参照設定にMSO.DLLを指定して
    「Microsoft Office 15.0 Object Library」を追加して
    実行してみましたが、同じアラームがでました。
    2015年6月1日 12:41
  • 参照設定から、PC1から移植した
    Interop.Microsoft.Office.Interop.Excel.dll(1.7.0.0)を削除して、
    Microsoft Office 15.0 Object Library
    (C:\WINDOWS\assembly\GAC_MSIL\Office\15.0.0.0__71e9bce111e9429c\Office.dll)
    だけにしたらImports Microsoft.Office.Interopや
    Dim xlApp As New Excel.Applicationに波線がついて
    ビルドエラーで起動すらしませんでした。

    Microsoft Office 15.0 Object Library
    (C:\WINDOWS\assembly\GAC_MSIL\Office\15.0.0.0__71e9bce111e9429c\Office.dll)
    を削除して、Interop.Microsoft.Office.Interop.Excel.dll(1.7.0.0)
    だけに戻しましたが、当然、元のエラーで止まります。

    今度は参照設定から、
    Interop.Microsoft.Office.Interop.Excel.dll(1.7.0.0)を削除して、
    Microsoft.Office.Interop.Excel(15.0.0.0)(C:\Windows\assembly\GAC_MSIL\Microsoft.Office.
    Interop.Excel\15.0.0.0__71e9bce111e9429c\Microsoft.Office.Interop.Excel.dll)
    だけにしたら元のまったく同じエラーで止まります。
    いずれも同じく「xlBooks = xlApp.Workbooks」の所でエラーが出ます。

    2015年6月2日 12:37
  • 環境差であり得るとしたら、Office のエディションかなぁ。
    クイック実行(英名:Click to Run)で仮想化されている、仮想化されていないの差があるなら、何か起きても不思議ではないですが…。

    // 環境固有事象となりそうなので、解決が難しい気はしています。お急ぎの場合は有償サポートを頼ることも考えてください。

    • 回答の候補に設定 星 睦美 2015年6月5日 8:31
    • 回答としてマーク 星 睦美 2015年6月11日 6:47
    2015年6月2日 13:45
    モデレータ
  • 細かい内容まで見てませんが・・・。

    エラー内容からして COM オブジェクトのインターフェース取得不良ですから、Office バージョンの不一致が疑わしいです。

    後で Access 2000 を入れているらしいので、セットアップによる COM 登録不良も要因として考えられますね。

    コード不良も無くはないかもですが、環境不良の線が強いので解決は難しいでしょうね。

    環境不良なら Office 2013 の再セットアップで治る可能性がわずかにありますが・・・。

    • 回答の候補に設定 星 睦美 2015年6月5日 8:31
    • 回答としてマーク 星 睦美 2015年6月11日 6:47
    2015年6月2日 23:15