C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: VB .NetからEXCELのコードを書くとエラーになる


(過去ログ 177 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■101537 / inTopicNo.1)  VB .NetからEXCELのコードを書くとエラーになる
  
□投稿者/ TAKE (12回)-(2023/03/13(Mon) 19:35:12)
TAKE さんの Web サイト

分類:[VB.NET/VB2005 以降] 

何時も参考にさせていただきありがとうございます。
環境はVisulStadio2015 VB
Windows10です。

ソリューションには複数のプロジェクトファイルがあるのですが、特定のE\XCELファイルとシートを開き
文字とか数値を決まったセルの位置に設定してEXCELファイルを出力しようと考えています。
上記の”WEBサイト(任意)”のVB.Netを参考にしてEXCEKLを制御したいプロジェクトファイルを右クリ 追加→参照→COMでMicrosoftOffice 16.0 Object Libraryを指定、
さらに参照でMicrosoft→Microsoft1,Office.Interrop.Excel.Dllを参照でともにOKボタンをおしました。

Dim spp as Excel.Application
Dim book as Excel.wrokbebook
Dim shrrt as Excel.Worksheet

”Excel."までと入力するとApplication,Workbook,WorkSeetは表示されるのですが、”Microsoft.Office.Intertop.Excel”ではあいまいですとエラーになってしまいます。
上記の環境でVisualStadio2015 VB で指定したEXCELのシートのセルに値とかを設定して出力したいのですがどうすればよいでしょうか?


引用返信 編集キー/
■101538 / inTopicNo.2)  Re[1]: VB .NetからEXCELのコードを書くとエラーになる
□投稿者/ 魔界の仮面弁士 (3583回)-(2023/03/13(Mon) 20:57:30)
No101537 (TAKE さん) に返信
> ”Microsoft.Office.Intertop.Excel”ではあいまいですとエラーになってしまいます。

複数のプロジェクトがあるのですよね。それぞれの参照設定はどうなっていますか?

他のコミュニティで見かけた事例としては、Project1 が Project1 自身の EXE を参照設定していて
誤動作を起こしているケースがありました。今回、ソリューション内に複数のプロジェクトがあるようなので
循環参照などの不自然な参照構成になっていないか、いま一度確認してみてください。
引用返信 編集キー/
■101541 / inTopicNo.3)  Re[2]: VB .NetからEXCELのコードを書くとエラーになる
□投稿者/ TAKE (13回)-(2023/03/14(Tue) 09:22:37)
TAKE さんの Web サイト
No101538 (魔界の仮面弁士 さん) に返信
> ■No101537 (TAKE さん) に返信
>>”Microsoft.Office.Intertop.Excel”ではあいまいですとエラーになってしまいます。
>
> 複数のプロジェクトがあるのですよね。それぞれの参照設定はどうなっていますか?
>
> 他のコミュニティで見かけた事例としては、Project1 が Project1 自身の EXE を参照設定していて
> 誤動作を起こしているケースがありました。今回、ソリューション内に複数のプロジェクトがあるようなので
> 循環参照などの不自然な参照構成になっていないか、いま一度確認してみてください。

ご回答ありがとうございます。
ソリューション内の各プロジェクトをEXCELを出力するプロジェクトしか参照→COMにMirosoft Exce l6.0 Object LibraryとMicrosoft Office 16.0 Object Libraryしか設定してませんでした。
引用返信 編集キー/
■101542 / inTopicNo.4)  Re[3]: VB .NetからEXCELのコードを書くとエラーになる
□投稿者/ 魔界の仮面弁士 (3584回)-(2023/03/14(Tue) 10:11:30)
# スペルミス多いですね…。

No101541 (TAKE さん) に返信
> Mirosoft Exce l6.0 Object Libraryと
> Microsoft Office 16.0 Object Libraryしか設定してませんでした。

l6.0 ?

"Microsoft Excel 16.0 Object Library" と
"Microsoft Office 16.0 Object Library" のことですね。


それらを参照しただけでは、
>>> Dim spp as Excel.Application
>>> ”Microsoft.Office.Intertop.Excel”ではあいまいですとエラーになってしまいます。
とはならず、下記のエラーになってしまうはずです。

エラー: BC30002
型 'Excel.Application' は定義されていません。



この場合は、データ型の定義を
 As Global.Microsoft.Office.Interop.Excel.Application
または
 As Microsoft.Office.Interop.Excel.Application
にしてみてください。これでエラーが消えるのではないでしょうか。
(ついでに言えば、変数名の spp というのも、app の間違いな気がします)


もしも単に As Excel.〜 と書けるようにしたいのであれば、.vb ファイルの先頭に
 Imports Excel = Microsoft.Office.Interop.Excel
などの宣言が必要です。もし、「Imports 別名 = 〜」表記が他にも記載されているのなら、
それらが競合していないかも確認しておいてください。

なお、そのコードを利用するには、開発環境および実行環境の両方に、
MSI 版の Excel 2016 (あるいは Office Professional Plus 2016 など)がインストールされている必要があります。
(ちなみにストアアプリ版の Excel は、セキュリティ上の理由で外部のアプリと連携できません)


>>> Dim book as Excel.wrokbebook
ろるくべぶっく?
wrokbebook ではなく
Workbook ですよね?


>>> Dim shrrt as Excel.Worksheet
しゅるると?
shrrt ではなく
sheet なのでは。
引用返信 編集キー/
■101543 / inTopicNo.5)  Re[1]: VB .NetからEXCELのコードを書くとエラーになる
□投稿者/ 魔界の仮面弁士 (3585回)-(2023/03/14(Tue) 13:16:08)
No101537 (TAKE さん) に返信
> 上記の”WEBサイト(任意)”のVB.Netを参考にしてEXCEKLを制御したいプロジェクトファイルを右クリ 追加→参照→COMでMicrosoftOffice 16.0 Object Libraryを指定、

EXCEKL → Excel というのはさておき、その参考サイトに書かれているのは
「Microsoft Excel xxx Object Library」であって
「Microsoft Office 16.0 Object Library」ではないですよ。
(名前は似ていますが、それぞれ別のライブラリです)


それに、参考にしているサイトは Visual Basic の記事ではなく、
VBA - Visual Basic for Applications のものですよね??


VBA は、変数の有効期間が外れるなどして、オブジェクトの参照カウントが 0 になった時点で
COM オブジェクトが自動解放されるのですが、VB.NET から呼び出す場合はそうではありません。

VB.NET から利用する場合は、各オブジェクトの使用後に、『ReleaseComObject メソッド』を
個別に呼び出すなどして、「明示的な解放手続き」の手順をきちんと踏まねばなりません。
この振る舞いの違いは、文法的な違い以上に大きなものです。(エラーになるわけでは無いので、むしろたちが悪い)

たとえば、そのサイトで記述されていたような
 sheet.Cells(2, 1).Value = "3"
といった記述をそのまま VB.NET で実行してしまうと、オブジェクトを正しく解放できなくなるため、
使用後も Excel が即時解放されずに、メモリ上に残り続けてしまうといった事態を招いてしまいます。

参考にするのであれば、VBA ではなく VB.NET 向け(あるいは C# 向け)の資料を
探すことを強くおすすめします。もしも VBA 版を参考にされるというのであれば、
VBA と VB.NET の違いを充分に理解した上で、正しく書き換えていく必要があります。



> 追加→参照→COMでMicrosoftOffice 16.0 Object Libraryを指定、
> さらに参照でMicrosoft→Microsoft1,Office.Interrop.Excel.Dllを参照でともにOKボタンをおしました。

Workbook や Worksheet などを利用する場合は「Microsoft Excel XX.X Object Library」を参照設定します。
これには Microsoft.Office.Interop.Excel 名前空間のインターフェイスや列挙型が含まれます。

★ Microsoft Excel 16.0 Object Library
 ライブラリ名: Microsoft.Office.Interop.Excel
  参照表示名: Microsoft.Office.Interop.Excel
 アセンブリID: {00020813-0000-0000-C000-000000000046}\1.9\0\primary
  バージョン: 1.9.0.0
  ファイル名: C:\WINDOWS\assembly\GAC_MSIL\Microsoft.Office.Interop.Excel\15.0.0.0__71e9bce111e9429c\Microsoft.Office.Interop.Excel.dll


また、CommandBar や FileDialog といった、(Excel ではなく)Office から提供される機能については
下記を参照します。これには Microsoft.Office.Core 名前空間のインターフェイスや列挙型が含まれます。
それらを使わないのであれば、必ずしも Microsoft Office XX.X Object Library を参照する必要はありません。

★ Microsoft Office 16.0 Object Library
 ライブラリ名: Microsoft.Office.Core
  参照表示名: Office
 アセンブリID: {2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}\2.8\0\primary
  バージョン: 2.8.0.0
  ファイル名: C:\WINDOWS\assembly\GAC_MSIL\Office\15.0.0.0__71e9bce111e9429c\Office.dll



AddIn や CodePane といった VBA 開発環境の制御などが必要な場合はこちら。
Microsoft.Vbe.Interop 名前空間のインターフェイスや列挙型が含まれます。
それらを利用しない場合は、参照設定の必要はありません。

★ Microsoft Visual Basic for Applications Extensibility 5.3
 ライブラリ名: VBIDE
  参照表示名: Microsoft.Vbe.Interop
 アセンブリID: {0002E157-0000-0000-C000-000000000046}\5.3\0\primary
  バージョン: 5.3.0.0
  ファイル名: C:\WINDOWS\assembly\GAC_MSIL\Microsoft.Vbe.Interop\15.0.0.0__71e9bce111e9429c\Microsoft.Vbe.Interop.dll
引用返信 編集キー/
■101544 / inTopicNo.6)  Re[2]: VB .NetからEXCELのコードを書くとエラーになる
□投稿者/ TAKE (14回)-(2023/03/14(Tue) 13:24:16)
TAKE さんの Web サイト
No101543 (魔界の仮面弁士 さん) に返信
> ■No101537 (TAKE さん) に返信
>>上記の”WEBサイト(任意)”のVB.Netを参考にしてEXCEKLを制御したいプロジェクトファイルを右クリ 追加→参照→COMでMicrosoftOffice 16.0 Object Libraryを指定、
>
> EXCEKL → Excel というのはさておき、その参考サイトに書かれているのは
> 「Microsoft Excel xxx Object Library」であって
> 「Microsoft Office 16.0 Object Library」ではないですよ。
> (名前は似ていますが、それぞれ別のライブラリです)
>
>
> それに、参考にしているサイトは Visual Basic の記事ではなく、
> VBA - Visual Basic for Applications のものですよね??
>
>
> VBA は、変数の有効期間が外れるなどして、オブジェクトの参照カウントが 0 になった時点で
> COM オブジェクトが自動解放されるのですが、VB.NET から呼び出す場合はそうではありません。
>
> VB.NET から利用する場合は、各オブジェクトの使用後に、『ReleaseComObject メソッド』を
> 個別に呼び出すなどして、「明示的な解放手続き」の手順をきちんと踏まねばなりません。
> この振る舞いの違いは、文法的な違い以上に大きなものです。(エラーになるわけでは無いので、むしろたちが悪い)
>
> たとえば、そのサイトで記述されていたような
>  sheet.Cells(2, 1).Value = "3"
> といった記述をそのまま VB.NET で実行してしまうと、オブジェクトを正しく解放できなくなるため、
> 使用後も Excel が即時解放されずに、メモリ上に残り続けてしまうといった事態を招いてしまいます。
>
> 参考にするのであれば、VBA ではなく VB.NET 向け(あるいは C# 向け)の資料を
> 探すことを強くおすすめします。もしも VBA 版を参考にされるというのであれば、
> VBA と VB.NET の違いを充分に理解した上で、正しく書き換えていく必要があります。
>
>
>
>>追加→参照→COMでMicrosoftOffice 16.0 Object Libraryを指定、
>>さらに参照でMicrosoft→Microsoft1,Office.Interrop.Excel.Dllを参照でともにOKボタンをおしました。
>
> Workbook や Worksheet などを利用する場合は「Microsoft Excel XX.X Object Library」を参照設定します。
> これには Microsoft.Office.Interop.Excel 名前空間のインターフェイスや列挙型が含まれます。
>
> ★ Microsoft Excel 16.0 Object Library
>  ライブラリ名: Microsoft.Office.Interop.Excel
>   参照表示名: Microsoft.Office.Interop.Excel
>  アセンブリID: {00020813-0000-0000-C000-000000000046}\1.9\0\primary
>   バージョン: 1.9.0.0
>   ファイル名: C:\WINDOWS\assembly\GAC_MSIL\Microsoft.Office.Interop.Excel\15.0.0.0__71e9bce111e9429c\Microsoft.Office.Interop.Excel.dll
>
>
> また、CommandBar や FileDialog といった、(Excel ではなく)Office から提供される機能については
> 下記を参照します。これには Microsoft.Office.Core 名前空間のインターフェイスや列挙型が含まれます。
> それらを使わないのであれば、必ずしも Microsoft Office XX.X Object Library を参照する必要はありません。
>
> ★ Microsoft Office 16.0 Object Library
>  ライブラリ名: Microsoft.Office.Core
>   参照表示名: Office
>  アセンブリID: {2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}\2.8\0\primary
>   バージョン: 2.8.0.0
>   ファイル名: C:\WINDOWS\assembly\GAC_MSIL\Office\15.0.0.0__71e9bce111e9429c\Office.dll
>
>
>
> AddIn や CodePane といった VBA 開発環境の制御などが必要な場合はこちら。
> Microsoft.Vbe.Interop 名前空間のインターフェイスや列挙型が含まれます。
> それらを利用しない場合は、参照設定の必要はありません。
>
> ★ Microsoft Visual Basic for Applications Extensibility 5.3
>  ライブラリ名: VBIDE
>   参照表示名: Microsoft.Vbe.Interop
>  アセンブリID: {0002E157-0000-0000-C000-000000000046}\5.3\0\primary
>   バージョン: 5.3.0.0
>   ファイル名: C:\WINDOWS\assembly\GAC_MSIL\Microsoft.Vbe.Interop\15.0.0.0__71e9bce111e9429c\Microsoft.Vbe.Interop.dll

全プロジェクトの追加、参照で他のプロジェクトでつかっていましたので対象のプロジェクトから Microsoft Excel 16.0 Object Library,Microsoft Office 16.0 Object Librarynの参照設定しないようにすると正常に動作しました。 いろいろとご丁寧に教えていただきありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -