重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

Sub Test()
Dim wdObj As Word.Application
Set wdObj = New Word.Application
wdObj.Visible = True
Set wdObj = Nothing
End Sub

で、ワードの空のアプリケーションを開けますが、
Set wdObj = Nothingの意味が分かりません。

Dim wdObj As Word.Applicationは変数の宣言
Set wdObj = New Word.Applicationは、インスタンスの生成
wdObj.Visible = Trueは、見えるようにする
はわかるのですが、
Set wdObj = Nothingは何をしてるのですか?

調べたことろによると「オブジェクトの破棄」との事ですが
破棄されてる事を目で確認することはできないのでしょうか?

タスクマネージャーのプロセスを見ると、
Set wdObj = New Word.Applicationを実行後に、
WINWORD.EXEが表示されることを確認できますが、
Set wdObj = Nothingを通過しても
WINWORD.EXEは消えません。
そりゃアプリケーションが立ち上がってるからだと思いますが、
だったら何のために Set wdObj = Nothingはあるのでしょうか?

立ち上げたワードをバツボタンで閉じると
タスクマネージャーのWINWORD.EXEは消えました。

A 回答 (2件)

こんにちは



何か、すごく難しくしている質問なのですが、

この部分。
 Set wdObj = Nothing

>だったら何のために Set wdObj = Nothingはあるのでしょうか?

端的に言うと、そのコードでは、何の意味がないですね。
実験的なコードはあくまでも、実験の域を越えないというべきかもしれません。

'//
Sub Test1()
 Dim wdObj As Word.Application
 Dim wdDoc As Word.Document
 Set wdObj = New Word.Application
 wdObj.Visible = True '←一瞬で行うので意味はない
 Set wdDoc = wdObj.Documents.Add
 wdDoc.Range.Text = "ABC"
 wdObj.ActiveDocument.SaveAs2 ("Test1225.docx")
 wdObj.Quit
 Set wdObj = Nothing '←上記でQuitを使っているので、ここは生きていない。
End Sub
'//

もともと、Set wdObj = Nothing というのは、メモリにオブジェクトとしてWord が残った時に時に、開放するものです。上記のコードのような場合は、形式的に、Set wdObj= Nothing とすることが多いのですが、実際に、手動であれ、マクロであれアプリを終わらせているなら意味はありません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/12/28 22:28

Set wdObj = New Word.Applicationは、


新しいWord.Applicationをオブジェクト変数wdObjに代入し(割り当て)ています。これで、いちいち元のオブジェクトを指定しなくてもWdObjという変数でオブジェクトを指定できるようになります。それで、

wdObj.Visible = True

で、Word.Applicationすなわち、Wordが見えるようになります。

Set wdObj = Nothingは、

この代入(割り当て)を解除します。だから、これ以降はwdObjでWord.Applicationの指定ができなくなります。
VBAでwdObjをWord.Applicationとして使わなければ、何の変りもありません。以後、wdObjでWord.Applicationを使わなければ、解除して、システム リソースとメモリ領域を解放したほうがいいでしょう。ただし、質問のSubでは、wdObjがプロシージャレベルの宣言なので、Endで解放されてしまうとは思いますが。

次のように順序を入れ換えれば、エラーになります。

Sub Test()
Dim wdObj As Word.Application
Set wdObj = New Word.Application
Set wdObj = Nothing
wdObj.Visible = True
End Sub

なお、

Sub Test()
Dim wdObj As Word.Application
Set wdObj = Word.Application
Word.Application.Visible = True
Set wdObj = Nothing
End Sub

これで、wdObj とWord.Applicationが同等とわかるでしょう。ただし、これは新しいWordを開いていないので、現在のWordを表示しますから何も変わらないように見えるでしょう。

Word.Application.Visible = False

とすれば、現在のWordが非表示になります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/12/28 22:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

今、見られている記事はコレ!