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

このQ&Aのポイント
  • オブジェクトの破棄とメモリの解放は同じ意味ですか?
  • サンプルコードの中での「Set objIE = Nothing」は、オブジェクトの破棄を意味するのか、メモリの解放を意味するのか、どちらなのでしょうか?
  • この場合、「Set objIE = Nothing」はオブジェクトの破棄とメモリの解放のどちらが正しいのでしょうか?
回答を見る
  • ベストアンサー

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

「オブジェクトの破棄」と「メモリの解放」は同じ意味ですか? ********************************* 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」は、 「オブジェクトの破棄」でしょうか? 「メモリの解放」でしょうか? どちらでもありますか? ご回答よろしくお願いします。

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

  • ベストアンサー
  • excelist
  • ベストアンサー率56% (13/23)
回答No.1

「同じ意味ではないが、場合によっては同じ意味となる」が回答になると思います。イメージで言うと「オブジェクトの破棄」≦「メモリの解放」です。一般的に「オブジェクトの破棄」と言うと「該当するオブジェクトを破棄することにより、そのオブジェクトが使っていたメモリを解放する」というように使われると思います。「メモリの解放」といった場合にはオブジェクトに限らず、例えばアプリケーション自体が使っているメモリであったり、定数宣言があった場合に使われるメモリであったり、とオブジェクト以外のメモリも指しますので、意味的には後者の方が大きい概念となります。 記載されている「Set objIE = Nothing」について言うと、「オブジェクトの破棄をしている」と言っても「メモリの解放をしている」と言っても差し支えないと思います(同じ意味として使える)。 Excelを閉じたときなどに「Excelのオブジェクトの破棄をしている」と言うと正しくないですが「Excelが使っていたメモリを解放している」は正しい表現だと思います。(実際はExcelのオブジェクトの破棄はされていると思いますが、オブジェクト以外が使っていたメモリも解放されるため)

jh78yt4512
質問者

お礼

同じ意味ではないが、場合によっては同じ意味となる」 のですね。 「オブジェクトの破棄」 そのオブジェクトが使っていたメモリを解放する 「メモリの解放」 例えばアプリケーション自体が使っているメモリであったり、 定数宣言があった場合に使われるメモリであったり、 とオブジェクト以外のメモリも指す --------------------------------------------------------- 覚えます!ありがとうございました。

関連するQ&A

  • 住所を入力し、検索ボタンをクリックしたいのですが

    グーグルマップを開き 住所を入力し、検索ボタンをクリックしたいのですが それをvbaで実現可能でしょうか? Dim objIE As Object Sub Sample() Dim myObj As Object Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.navigate "https://www.google.co.jp/maps" Do While objIE.Busy = True DoEvents Loop Do While objIE.document.readyState <> "complete" DoEvents Loop Set objIE = Nothing End Sub はできたのですが 「グーグルマップを検索する」が ソース内で見当たらないし さらに 検索ボタンもソース内で探せません。 グーグルの検索窓に「東京都千代田区丸の内1-9-1」 トイレたいのですが VBAでどうすればいいのでしょうか?

  • MSXML2で、サイトのタイトルを取得したい

    アクセスvbaです。 InternetExplorerの方法だと、 **************************************************** Sub Sample1() Dim ObjIE As InternetExplorer Set ObjIE = CreateObject("InternetExplorer.Application") ObjIE.Navigate "http://www.yahoo.co.jp/" ObjIE.Visible = True Do While ObjIE.Busy = True DoEvents Loop Do While ObjIE.Document.ReadyState <> "complete" DoEvents Loop Debug.Print ObjIE.Document.Title Debug.Print ObjIE.LocationName ' 同じ ObjIE.Quit Set ObjIE = Nothing End Sub **************************************************** で、該当のサイトのタイトルを取得できるのですが、 これではなく、 **************************************************** Sub Sample2() Dim objMSXML2 As Object Dim myObj As Object Dim myAll As Variant Set objMSXML2 = CreateObject("MSXML2.XMLHTTP") objMSXML2.Open "GET", "http://www.yahoo.co.jp/", False objMSXML2.Send myAll = objMSXML2.responseText 'ソースを抜き出す ’タイトル取得 Set objMSXML2 = Nothing End Sub **************************************************** の方法で、サイトのタイトルを取得したいのですが、 可能でしょうか? コードをご教授ください。よろしくお願いします。

  • 「地図」で検索するにはどういう操作をすればいいので

    ヤフーのトップページから 値を入れて検索を押すまではできるのですが 「ウェブ」ではなく「地図」で検索するにはどういう操作をすればいいのでしょうか? Sub yahoo() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp/" Do While objIE.Busy = True DoEvents Loop Do While objIE.Document.ReadyState <> "complete" DoEvents Loop objIE.Document.forms(0).elements("p").Value = "東京" '‘「地図」をクリックする操作をしたい objIE.Document.forms(0).submit Set objIE = Nothing End Sub 宜しくお願いいたします。

  • DoEvents

    VBSでDoEventsは使えないのでしょうか? *************************** Dim ObjIE dim i Set ObjIE = CreateObject("InternetExplorer.Application") ObjIE.Navigate "http://oshiete.goo.ne.jp/" ObjIE.Visible = True Do While ObjIE.Busy = True DoEvents Loop Do While ObjIE.Document.ReadyState <> "complete" DoEvents Loop Set ObjIE = Nothing *************************** だと、エラーになりました。 Wscript.sleep 3000 ならエラーにならずにコードは動きました。 VBAならDoEventsは使えるのに VBSで使えない理由を教えてください。

  • ie操作 ローカルパスだとエラーになる

    ヤフーなら問題なくコードが動くのに、URLがローカルのパスだと、エラーになってしまいます。 具体的には、 *********************************************************** Sub Sample1() Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate "http://www.yahoo.co.jp/" objIE.Visible = True Do Until objIE.ReadyState = 4 Loop Do While objIE.Busy = True DoEvents Loop End Sub *********************************************************** だと、問題なく実行されるのに、 *********************************************************** Sub Sample2() strFName = MyDesktop & "\index.html" Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate strFName objIE.Visible = True Do Until objIE.ReadyState = 4 Loop Do While objIE.Busy = True DoEvents Loop End Sub ------------------------- Function MyDesktop() Dim WSH As Variant Set WSH = CreateObject("Wscript.Shell") MyDesktop = WSH.SpecialFolders("Desktop") Set WSH = Nothing End Function *********************************************************** だと、 Do Until objIE.ReadyState = 4 で オートメーションエラー 起動されたオブジェクトはクライアントから切断されました。 となります。 なぜローカルだと、エラーになるのでしょうか? 何が違うのでしょうか?

  • オブジェクト変数または With ブロック変数が設定されていません。

    下記の様に組みましたが、下記の★印の所で止まる様な事があります。 毎回止まるわけではないのですが、止まる時に「オブジェクト変数または With ブロック変数が設定されていません。」と表示されますが、 原因は何か?どの様にすればいいのか?など詳しく教えてください。 よろしくお願いします。 Sub test() Dim objIE As Object Dim strCOMMENT As String Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://" While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop 'データをセットする 'htmlドキュメント フォーム(0番目) アイテムに転記(代入)する objIE.Document.forms(0).Item("username").Value = "11111" objIE.Document.forms(0).Item("password").Value = "11111" While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop objIE.Document.all.subm.Click While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop For Each link In objIE.Document.Links If link.href = "http://" Then link.Click End If Next While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop 'タイトル・コメントの読み込み strtitle = Sheets("sheet1").Range("k7") strCOMMENT = Sheets("sheet1").Range("k9") Application.WindowState = xlMinimized While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop objIE.Document.forms(0).Item("title").Value = strtitle objIE.Document.forms(0).Item("comment").Value = strCOMMENT While objIE.readystate <> 4 While objIE.busy = True DoEvents ' Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop objIE.Document.all.submit.Click While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop 'フォーム(0番目)を .Submit(確認) する objIE.Document.forms(0).getElementsByTagName("input")(11).Click '←★この部分で止まる時があります。 While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop For Each link In objIE.Document.Links If link.href = "http://" Then link.Click End If Next While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 7, Now()) Do While Now() < Wait_Time DoEvents Loop objIE.Quit '.Quitで閉じる End Sub

  • 現在表示されているURLを取得したいのですが

    Sub test1() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "http://www.goo.ne.jp/" Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop Debug.Print objIE.Navigate Set objIE = Nothing End Sub //////////////////////////////////////////////// をやろうとすると、 Debug.Print objIE.Navigate の部分で、「引数は省略できません。」とエラーになります。 どう修正すればいいか教えてください。 ("http://www.goo.ne.jp/"はダミーです)

  • オートメーション エラーです

    win7 エクセル2010です。 ************************************************* Dim objIE As InternetExplorer Sub Sample1() Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.navigate "http://www.goo.ne.jp/" Call wait1 Set objIE = Nothing End Sub ************************************************* Sub wait1() Const READYSTATE_COMPLETE As Long = 4 Do Until objIE.readyState = READYSTATE_COMPLETE Loop Do While objIE.Busy = True DoEvents Loop End Sub ************************************************* だと うまく行きますが、 URLの部分の社内のURLにすると 実行時エラー-2147417848(80010108) 「オートメーションエラーです。起動されたオブジェクトはクライアントから切断されました」 になります。 社内のURLの拡張子は、aspxです。 ウォッチウインドウでobjIEをウォッチ式に登録すると objIE.navigate を過ぎると 中身が、<オートメーション エラーです。> になります。 これは社内のシステムの方でプロタクトがかかっているのでしょうか?

  • サイトのソースのsubmitボタンの数を取得したい

    サイトのソースのsubmitボタンの数を取得したいのですが Sub test() Dim objIE As InternetExplorer Dim MyRow As Long Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "http://www.coneco.net/" Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop Debug.Print objIE.Document.all.tags("input").Type("submit").Count Set objIE = Nothing End Sub だとうまく動きません。 どう、変更すればよろしいですか?

  • 「OuterText」と「「innerText」」

    「OuterText」と「「innerText」」の違いは何でしょう? エクセルVBAです。 Sub test() Dim objLINK As Object Dim objIE As InternetExplorer Dim i As Long Set objIE = CreateObject("InternetExplorer.Application") objIE.GoHome objIE.Visible = True Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop For Each objLINK In objIE.Document.Links i = i + 1 Cells(i, 1) = objIE.Document.Links(i - 1).OuterText ' Next objIE.Quit Set objIE = Nothing End Sub のOuterTextをinnerTextに変えても結果は同じなのですが、 「OuterText」と「「innerText」」の違いはなんでしょう? ヘルプを見ようと思ったのですが なぜか見れないので教えてください。

専門家に質問してみよう