none
VisualStudio2010でExcelを開くときのエラー RRS feed

  • 質問

  • お世話になります。

    VisualStudio2010のVB.netで、Excelファイルを作成するアプリケーションを開発しています。

    『Microsoft.Office.Interop』を参照し、BookのOpenメソッド実行時に例外が発生するのですが、

    その原因について、皆様のお力をお借りできればと思い、投稿させていただきました。


    ①ソース

     まずは問題のプログラムを記載します。

     =================================================

    Private sub subExcelOpen()

        Try
        
            'EXCELアプリケーション
            Dim xlApp as Object
            'ワークブック群
            Dim xlBooks As Object
            'ワークブック
            Dim xlBook As Object
            'シート群
            Dim xlSheets As Object
            'シート
            Dim xlSheet As Object
            '選択セル
            Dim xlRange As Object

            'Bookを閉じたときのイベント設定
            RemoveHandler DirectCast(xlApp, Excel.Application).WorkbookBeforeClose, AddressOf subWorkbookBeforeClose
            AddHandler DirectCast(xlApp, Excel.Application).WorkbookBeforeClose, AddressOf subWorkbookBeforeClose
             
             xlApp = Activator.CreateInstance(Type.GetTypeFromProgID("Excel.Application"))
             xlBooks = xlApp.Workbooks

             '◆◆◆
             'ここでエラーします。
             xlBook = xlBooks.Open(FilePath)
        '◆◆◆

       ’この後もコードはありますが、例外の発生箇所が上記なので、以下割愛します。

      
        Catch ex As System.Runtime.InteropServices.COMException
                'ExcelComに関する例外処理
                
                '◆◆◆のエラーはここでキャッチされます。
                '内容は以下の通りです。
                
                'System.Runtime.InteropServices.COMException (0x800A03EC): 申し訳ございません。

        C:\//AAA/BBBCCCCC.xlsxが見つかりません。名前が変更されたか、移動や削除が行われた可能性があります。
                

        Catch ex As Exception
               '一般的な例外処理

        End Try

    End Sub

    =================================================

    ②ご相談内容

     エラーに記載されている通り、パスがないそうなのですが、

     そもそも、エラーメッセージに記載されているパスが不正です。

     本来『C:\AAA\BBB\CCCCC.xlsx』にファイルは実際に存在しています。

     又、ステップ実行でOpenメソッドの前まで進めて、Openメソッドの引数のファイル名にしているパスは正確に、

     上記の通りのパスになっているのですが、

     Openメソッドを実行するとエラーメッセージの通り『C:\//AAA/BBBCCCCC.xlsx』になってしまいます。

      ※メソッド実行後のパスはスラッシュの数もおかしいですし、BBBフォルダとファイル名のCCCCCがくっついてしまっています。

     対策方法等ありましたらご教授いただけますでしょうか?

    ③その他

     本関数内で使われているエクセル用の変数はもともと、Excel型で定義されていました。

     ユーザーさんがExcelのバージョンを上げたことによって、開発環境のEXCELとバージョンが異なりエラーが発生したため、

     今回変数の型をObjectにして、遅延バインディングの方法に変更しています。

     その際に発生した例外です。


    ④開発環境

     OS :Windows 8 Pro

       IDE :VisualStudio2010 SP1

      Excel :Excel2016

               ※VBで参照しているのはMicrosoft Office 16.0 Object Library 2.4.0.0

    以上です。

    情報として不足がございましたら、ご指摘いただければと思います。

    よろしくお願い致します。


     

     

     



    2018年1月20日 4:37

すべての返信

  • 'System.Runtime.InteropServices.COMException (0x800A03EC): 申し訳ございません。

    C:\//AAA/BBBCCCCC.xlsxが見つかりません。名前が変更されたか、移動や削除が行われた可能性があります。

    本来『C:\AAA\BBB\CCCCC.xlsx』にファイルは実際に存在しています。

    検証した上でなく申し訳無いのですが、エラーメッセージ内では「BBBCCCCC.xlsx」となっており、最後のディレクトリとファイル名がそのまま繋がっているのが気になりました。

    「変数(定数?):FilePath」にはどの様にしてパスをセットされていますか?

    もしも単純に連結している様であれば、Path.Combineメソッドの使用を推奨します。

    見当違いでしたらスミマセン。

    2018年1月20日 6:17
  • コメントありがとうございます。

    パスは、単純に連結してます。

    ディレクトリとファイル名を連結というより、1つの変数でフルパスを記述しています。

    ステップ実行で見る限りですが、openメソッド実行前は

    正確に指定されておりましたが、

    内部でパスが読めないような記述だったかもしれません。

    ご掲載頂いた、path.combineメソッドについて勉強してみます。

    ありがとうございました。



    2018年1月20日 6:47