• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:このマクロの意味について教えてください。)

ワードの空のアプリケーションを開く方法とSet wdObj = Nothingの意味

このQ&Aのポイント
  • ワードの空のアプリケーションを開く方法とは、マクロを使用して新しいWordアプリケーションを作成して表示することです。Set wdObj = Nothingは、作成したWordアプリケーションのインスタンスを破棄するために使用されます。
  • Set wdObj = Nothingは、作成されたWordアプリケーションのインスタンスをメモリから解放し、リソースを解放します。これにより、プログラムの実行中にメモリリークが発生するのを防ぐことができます。
  • ただし、ワードのアプリケーションがタスクマネージャーに表示され続けるのは、ワードがバックグラウンドで動作しているためです。ワードを閉じると、タスクマネージャーから消えます。

質問者が選んだベストアンサー

  • ベストアンサー
回答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 とすることが多いのですが、実際に、手動であれ、マクロであれアプリを終わらせているなら意味はありません。

tlnadcmv
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答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が非表示になります。

tlnadcmv
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • なぜ立ち上げた時はアクティブになら何でしょうか?

    VBAで Sub Sample() Dim wdObj As Word.Application Set wdObj = New Word.Application wdObj.Visible = True Set wdObj = Nothing End Sub でワードを立ち上げる事は出来るのですが アクティブになりません。 AppActivate wdObj を入れる事でアクティブになるのですが なぜ立ち上げた時はアクティブになら何でしょうか? VBEが面からF5を押して実行しているから VBE画面がアクティブになってしまっているのでしょうか?

  • NewはCreateObjectと同じ意味?

    Sub test01() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True End Sub Sub test02() Dim objIE As New InternetExplorer objIE.Visible = True End Sub この二つのコードを比較した場合、 Dim objIE As New InternetExplorer で宣言すれば、 Set objIE = CreateObject("InternetExplorer.application") がなくても、 objIE.Visible = True をしてみるとブラウザが立ち上がっているのですが、 これは NewはCreateObjectと同じ意味という事でしょうか?

  • AccessVBAからWordのマクロを実行するには

    [環境]Access2000,Word2000 AccessVBAでWordのオブジェクトをつくりファイルを開くところまでは たどり着いたのですが、開いたWordファイルにあるマクロを実行させる ことが出来ずに困っています。 WordオブジェクトのApplicationとDocumentsオブジェクトの関係も把握 しきれていないため、おかしなソースになっているかも知れません。 よろしくお願いします。 sub DoMacro() Dim oWrd as Word.Application Dim oDoc as Word.Document Set oWrd = New Word.Application With oWrd Set oDoc = oWrd.Documents.Open("c:\test.doc") .Visible = True .Application.Run ("Macro1") oDoc.SaveAs "c:\newTest.doc" .Quit End With End Sub

  • VBAでIE操作をするサンプル

    VBAでIE操作をするサンプルをネットでいくつか見ているのですが Sub Sample1() Dim objShell As Object Dim objIE As New InternetExplorer Set objShell = CreateObject("Shell.Application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp/" Set objIE = Nothing Set objShell = Nothing End Sub Sub Sample2() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp/" Set objIE = Nothing End Sub ではどちらを使った方がいいのでしょうか? 圧倒的にSample2の方がネットでは多いのですが Sample1のやり方もあることを知りました。 Sample1の方法でブラウザを開くメリットはあるのでしょうか?

  • 「オブジェクトの破棄」と「メモリの解放」は同じ意味

    「オブジェクトの破棄」と「メモリの解放」は同じ意味ですか? ********************************* Sub Sample1() Dim objIE As Object Dim buf As String Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.navigate "http://oshiete.goo.ne.jp/" Do While objIE.busy DoEvents Loop Do While objIE.Document.readyState <> "complete" DoEvents Loop Set objIE = Nothing End Sub ********************************* の場合の「Set objIE = Nothing」は、 「オブジェクトの破棄」でしょうか? 「メモリの解放」でしょうか? どちらでもありますか? ご回答よろしくお願いします。

  • アクセスからアクセスファイルを開くには?

    アクセスからアクセスファイルを開きたいのですがうまく出来ないので教えてください。 Option Compare Database Option Explicit Sub test() Dim App As Access.Application Dim MyFileName As String Set App = CreateObject("Access.Application") MyFileName = CurrentProject.Path & "\アクセスファイル名.mdb" With App .Visible = True End With Set App = Nothing End Sub で、 .Visible = True でアプリケーションは開きますが Set App = Nothing を通過すると開いたアプリケーションが閉じてしまいます。 それにアプリケーションが開くだけで肝心のファイルが開かれません。 なので「.ファイルを開くVBAコード」が必要だと思うのですがそのコードがわかりません。

  • 複数のタブを開きたい IE

    IE9を使っています。 画像のようにタブを二つ開くにはどうすればいいでしょうか? Sub test() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp/" Set objIE = Nothing End Sub だと一つのタブしか開けません。 Sub test() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp/" objIE.Navigate "http://www.yahoo.co.jp/" Set objIE = Nothing End Sub にしても Sub test() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp/" objIE.Navigate2 "http://www.yahoo.co.jp/" Set objIE = Nothing End Sub にしても1つのタブしか開けないです。 ご回答よろしくお願いします。

  • メッセージボックスを前面に表示させるには?

    Sub 教えて() Dim ExAp As Application Dim ExBk As Workbook Dim ExSh As Worksheet Set ExAp = CreateObject("Excel.Application") Set ExBk = ExAp.Workbooks.Add Set ExSh = ExBk.Worksheets(1) ExAp.Visible = True ExAp.WindowState = xlMaximized ThisWorkbook.Worksheets(1).Activate MsgBox "前面表示させたいお!" Set ExAp = Nothing Set ExBk = Nothing Set ExSh = Nothing End Sub これを実行するとメッセージボックスが隠れてしまいます。 どうしたらよいでしょうか?

  • これは実行中のVBEコードのイミディエイトウイント

    Sub Sample() Dim WD, task, n As Long Set WD = CreateObject("Word.Application") 'Wordを起動します For Each task In WD.Tasks 'Word VBAのTasks'コレクションを調べます If task.Visible = True Then ' タスク(プロセス)が実行中だったら Debug.Print task.Name ' タスクの名前を書き出します End If Next WD.Quit Set WD = Nothing End Sub これを実行すると 結果に イミディエイト も含まれるのですが、 これは実行中のVBEコードのイミディエイトウインドウのことを言っているのでしょうか?

  • CreateObjectとGetObjectの違い

    当方エクセル2003です。 Sub test_CreateObject() Dim App As Excel.Application Dim MyFileName As String Set App = CreateObject("Excel.Application") MyFileName = ActiveWorkbook.Path & "\新規Microsoft Excel ワークシート.xls" With App .Workbooks.Open FileName:=MyFileName .Visible = True End With Set App = Nothing End Sub --------------------------------------------------------- Sub test_GetObject() Dim App As Excel.Application Dim MyFileName As String Set App = GetObject(, "Excel.Application") MyFileName = ActiveWorkbook.Path & "\新規Microsoft Excel ワークシート.xls" With App .Workbooks.Open FileName:=MyFileName .Visible = True End With Set App = Nothing End Sub この二つは何が違うのでしょうか? どちらも既存のエクセルファイルがが開きます。

専門家に質問してみよう