VBでのExcelの操作について への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者 るきお(管理者)  (社会人) 投稿日時 2009/2/9 06:36:56
魔界の仮面弁士さん、情報提供ありがとうございます。
OfficeのPIAについてほとんど知らずに記事を書いていたことがわかりました。

K.Kさんのように実行できない方が多数いらっしゃることも考えられるので、記事を加筆して訂正しました。
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard44.htm

K.Kさんご迷惑をおかけしました。
また、情報提供していただいたり、一緒に考えてくださったみなさんありがとうございます。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2009/2/3 21:35:43
Office XP, 2003, 2007 には .NET からの操作のために、参照設定に使用できる
PIA (プライマリ相互運用機能アセンブリ) が用意されている事はご存知でしょうか。

PIA を用いた場合、Microsoft.Office.Interop.Excel.Applicatoin という名前になります。

一方、PIA が無い環境で参照設定すると、Visual Studio によって、IA(相互運用機能アセンブリ)が
自動生成される事になり、その場合は Excel.Applicatoin という名前になります。

なお、Microsoft が動作保証しているのは、PIA の方となります。


以下、参考資料:

http://support.microsoft.com/kb/328912/ja
http://msdn.microsoft.com/ja-jp/library/aa159923.aspx
http://blogs.msdn.com/dd_jpn/archive/2008/04/23/8419071.aspx
http://msdn.microsoft.com/ja-jp/library/cc375821.aspx
http://support.microsoft.com/kb/823996/ja
http://support.microsoft.com/kb/827476/ja
投稿者 るきお  (社会人) 投稿日時 2009/2/3 21:28:07
こんにちは。

>私は何が悪かったのでしょうか。
いえ。私が悪かったです。
私の環境でやるといつもMicrosoft.Office.Interop.Excel.Applicationという形式になっていたので、記事にはそのまま書いてしまったのですが、今回のご質問を見てよくよく考えてみると妙だと思って調べてみました。
まだ、ちょっと調べただけですがOfficeをインストールするときに「.NETプログラミングサポート」のような項目にチェックをつけているとMicrosoft.Office.Interop.Excel.Applicationが使用できるようになるようです。
記事の方も修正が必要なようです。

>また、このように変更するとよいと分かるには、何を勉強しておけばよかったのでしょうか。
.NETからCOMを操作する一般的な手法がわかっていればExcel.からはじまるのではないかという推測ができると思います。
これはOffice以外のCOM全般に通用するノウハウです。

情報提供ありがとうございます。
K.Kさんの環境でも無事動作できて良かったです。

ただ、VBからExcelを操作した場合、VBがExcelをつかんだままになってしまって、他の人や他のアプリケーションが該当のワークブックを編集できなくなってしまうことがあります。
この現象を防ぐにはVBをその都度終了させるか、VBがつかんだExcelを離すようにプログラムする必要があります。
その都度終了させられるレベルのもので、この運用で業務に支障がないようでしたらこれが一番楽です。
Excelを離すようにプログラムする方法はVisual Basic 中学校では説明していません。Excel ReleaseComObjectなどをヒントに検索等してみてください。
投稿者 K.K  (社会人) 投稿日時 2009/2/3 19:08:55
ご教示、ありがとうございます。
お示しくださいました通り、Microsoft.Office.Interop.を削除するとうまくいきました。大変ありがとうございます。これでExcelのシートを変更するプログラムが書けます(私の会社のPCのExcelはVBAの機能を制限したインストールで、ユーザーインターフェースが使えないのです)。
私は何が悪かったのでしょうか。また、このように変更するとよいと分かるには、何を勉強しておけばよかったのでしょうか。
お手数をおかけいたしますが、ご教示いただけますと幸いに存じます。
投稿者 るきお(管理者)  (社会人) 投稿日時 2009/1/30 22:28:12
こんにちは。


Microsoft.Office.Interop.Excel.Application
Microsoft.Office.Interop.Excel.Workbook
Microsoft.Office.Interop.Excel.Worksheet
の部分をそれぞれ
Excel.Application
Excel.Workbook
Excel.Worksheet

としてみるといかがでしょうか?
投稿者 K.K  (社会人) 投稿日時 2009/1/30 22:05:58
ご返答ありがとうございます。

>VBのバージョンは?

2008Expressです。

>エラーは正確に書いてください。

すみません。Dimのところで

Microsoft.Office.Interop.Excel.Application
Microsoft.Office.Interop.Excel.Workbook
Microsoft.Office.Interop.Excel.Worksheet

の三つが、Dim宣言文のAs以降のところでカーソルを合わせると「型・・・が定義されていません」(・・・には上の三つが入ります)のエラー表示がなされます。ビルドをしても同じエラーとなり、できません。

>参照設定はしてありますよね。

はい、COMで「Microsoft Excel 11.0 Object Library」を選んでOKしています。何度試してもエラーが取れません。

以上です。よろしくお願いします。
投稿者 ヴァン  (社会人) 投稿日時 2009/1/30 01:28:11
途中で押しちゃった。

>が、「型・・・が定義されていません」のエラーになります。

エラーは正確に書いてください。

参照設定はしてありますよね。

>まず、プロジェクトを作成してExcelに参照設定をしてください。Excelは.NET Framework上で動作しているわけではないので参照設定するときはCOMの欄から「Microsoft Excel 11.0 Object Library」を選びます。「11.0」のところはバージョンなので少しくらい数字が異なっていても構いません。

投稿者 ヴァン  (社会人) 投稿日時 2009/1/30 01:26:29
VBのバージョンは?

投稿者 K.K  (社会人) 投稿日時 2009/1/30 01:14:57
プログラムの終了の件では、お世話になりました。

http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard44.htm

の「4.Excelの操作」の「■リスト5:Excelに書き込んで保存する」の、

Dim Excel As New Microsoft.Office.Interop.Excel.Application
Dim Book As Microsoft.Office.Interop.Excel.Workbook
Dim Sheet As Microsoft.Office.Interop.Excel.Worksheet

において、
Microsoft.Office.Interop.Excel.Application
Microsoft.Office.Interop.Excel.Workbook
Microsoft.Office.Interop.Excel.Worksheet

が、「型・・・が定義されていません」のエラーになります。
PCは会社のものでIT部門が社員全員にOffice2003をインストールしています。
Excelのインストールで何か機能を削除したインストールになっているのでしょうか?
自宅ではOfficeがないため、試していません。
このエラーが出るPCでは、VBにExcelの操作をさせられないということでしょうか?
ご教示いただけますと、幸いに存じます。