
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は消えました。
No.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 とすることが多いのですが、実際に、手動であれ、マクロであれアプリを終わらせているなら意味はありません。
No.1
- 回答日時:
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が非表示になります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「Columns("A:C")」の列文字を...
-
worksheetFunctionクラスのVloo...
-
エクセルのVBAの標準モジュール...
-
Excelでフィルタをかけると警告...
-
VBAで既に開いている別アプリケ...
-
UserForm1.Showでエラーになり...
-
テキストボックス中の文字列の...
-
エクセルVBAで2つの画像を比較...
-
Excel VBAでIEにアクセスするプ...
-
VBScriptでファイルの日時順(降...
-
オブジェクトが見つかりません
-
ExcelVBAでのNZ関数について
-
VB6.0上でExcelオブジェクトを生成
-
findメソッドの変数について
-
実行時エラー 3265「要求された...
-
VBAで別のシートに図形描画
-
[C#]static void 関数内でthis
-
Excel VBAでWordの複数ファイル...
-
上下の位置揃えについて
-
コンパイルエラーの対処がわか...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
テキストボックス中の文字列の...
-
エクセルのVBAの標準モジュール...
-
Excelでフィルタをかけると警告...
-
実行時エラー 3265「要求された...
-
上下の位置揃えについて
-
ExcelVBAでのNZ関数について
-
VBAで既に開いている別アプリケ...
-
VBAで Set wb = Sheets(1).Cop...
-
AccessVBAで「dim dbs as datab...
-
EXCEL VBA オートシェイプナン...
-
オブジェクト変数またはWITHブ...
-
[VBA]CDOメッセージ送信エラー
-
エクセルマクロエラー「'Cells'...
-
findメソッドの変数について
-
オブジェクトが見つかりません
-
ある文字列が全て数字であるか...
-
オブジェクト変数の取得について
-
CreateObjectとGetObjectの違い
おすすめ情報