投稿者 魔界の仮面弁士  (高校生) 投稿日時 2013/5/10 09:51:55
> ただしPIA を意図してインストールした記憶はありません。
この機能は、Office 2010 では既定のインストールに含まれていますので、
通常は、インストールされた状態になっているはずです。

カスタムインストールを選択されていた場合には、
「.NET プログラミング サポート」の項で追加されるはずです。
あるいは、再頒布可能パッケージからの手動インストールも可能ですが、
今回は手動インストールの必要は無いでしょうね。
http://www.microsoft.com/en-us/download/details.aspx?id=3508


> (PIAって?という感じです)
PIA については、先に紹介した URL 内で触れられています。もう一度載せておきますね。
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard44.htm


> 選択後、[OK]をクリックしましたが、なんの変化もありませんでした。
状況を整理させてください。
変化が無いというのは、最初の質問にあった
>> ・型Applicationが定義されていません。
が動作しない状態になっている、という意味でしょうか?

参照されていれば、ソリューション エクスプローラーで [My Project]を開いたときに、
「参照」タブに表示される一覧に、COM コンポーネントとして以下の 3 つが
追加されると思いますが、この一覧にすら変化が無い状況なのでしょうか。

・Microsoft Office 14.0 Object Library
・Microsoft Visual Basic for Application Extensibility 5.3
・Microsoft Word 14.0 Object Library


もしも一覧が変化しているのであれば、
> (3)As Word.Application を As Microsoft.Office.Interop.Word.Application に変更してみる。
が使えるはずです。

実際のところ、そもそもすでに
>> Dim wdApp As Microsoft.Office.Interop.Word.Application 
>> wdApp = CreateObject("Word.Application")
>> までは、問題なく動いています。
までは完了していたはずなので、参照設定の問題はクリア済みかと思っていました。
参照設定が終わっていなければ、
『型 'Microsoft.Office.Interop.Word.Application' が定義されていません。』
のエラーになってしまっているはずですので…。

ちなみに、最初の回答で述べた
>>> →これで動くようなら、Microsoft.Office.Interop.Word を Imports しておく。
というのは、具体的には最初に使っていたコードの
Public Class Form1
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim wdApp As Word.Application   '←ここでエラーになっていた 
        wdApp = CreateObject("Word.Application")
がコンパイルエラーになるという状態を、参照設定を追加した上でのコード修正で
Public Class Form1
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
         'このように書き換えると、実行できるようになった 
        Dim wdApp As Microsoft.Office.Interop.Word.Application
        wdApp = CreateObject("Word.Application")
として実行可能となったのであれば、それをさらに
'Imports 宣言を追加 
Imports Microsoft.Office.Interop
Imports Word = Microsoft.Office.Interop.Word
Public Class Form1
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim wdApp As Word.Application   'Imports してあるため、元の Word.Application という単純表記でOK 
        wdApp = CreateObject("Word.Application")
と書き換えていく、という話です。

なお、参照設定を施している状況であれば、
wdApp = CreateObject("Word.Application")
ではなく、
'wdApp = New Word.Application() 
wdApp = New Microsoft.Office.Interop.Word.Application()
のように、New を使って生成したほうが望ましいです。

もし、CreateObject で生成する方針をとるのであれば、むしろ参照設定を施す必要すらないので、 先のるきおさんの回答にもあるように、Word 名前空間の型を使わず、Object 型に変更することでも対応可能となります。
ただしObject 型を使う方法の場合、入力ヒント機能(インテリセンス)が使えなくなりますし、オブジェクト解放の処理も複雑化することがありますので、可能な限り、参照設定を用いた方が望ましいです。


> いろいろな現象が起きています。整理してご報告します。
もう一つ確認したいのですが、実行中のコードに『wdApp.Visible = True』という記述はありますか?

プログラムから呼び出された Word は、非表示の状態で起動されますので、
.Visilbe = True の記述が無い場合、画面上の変化は特に生じません。
タスクマネージャの[プロセス]タブには、WINWORD.EXE が表示される程度です。

もし、非表示の Word に E:\Test.doc を開かせていたとしたら、次回実行時には
E:\Test.doc が二重に開かれた状態になってしまい、結果として
>> 「Test.docは編集のためにロックされています。次のいずれかを選択してください。」
という状態になってしまうことも考えられます。