• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルVBAで、IEからコピーするには)

エクセルVBAでIEからコピーするには

このQ&Aのポイント
  • エクセルVBAでIEからコピーするには、以下のコードを使用します。
  • ただし、エクスプローラーと同時に開いている場合には実行時エラー438が発生します。
  • エクセルとIEのみを開いている場合には正常に動作します。

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

  • ベストアンサー
  • lul
  • ベストアンサー率41% (10/24)
回答No.1

エクスプローラーにはTitle無かったと思います、その為エラーがでますね。 回避策はソースに2行追加すれば大丈夫だと思います。 For Each objWindow In objShell.Windows '起動中のタイトルを探して。 If InStr(LCase(objWindow.FullName), "iexplore.exe") Then '←この部分を追加 If Left(objWindow.Document.Title, 7) = "Office系" Then Set objIE = objWindow 'オブジェクトを代入 Msg = "Office系" Exit For End If End If '←この部分を追加(end if) Next これで、対象がIEで無ければその後の判定(Titleをチェックしたり)はしないので、エラーも無くなると思いますよ。

ki-aaa
質問者

お礼

ご教授、ありがとうございます。 巧くいきました。 実は、ON ERRで逃げ、エクスプローラーを閉じて再度実行させようかなとも思っていたのですが。 本当に助かりました。

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

関連するQ&A

  • VBAで、デバッグをお願いします。

    作りたいプログラムはpartsno_01から、partsno_20までのテキストボックスに、エクセルのセルA1から、A20までにある製品番号を入力し、データをsubmitするものです。 Sub pn() Dim ObjIE As Object Dim ObjShell As Object Dim ObjWindow As Object Dim WinExist As Boolean WinExist = False Set ObjShell = CreateObject("Shell.Application") For Each ObjWindow In ObjShell.Windows If TypeName(ObjWindow.document) = "HTMLDocument" Then WinExist = True Set ObjIE = ObjWindow End If Next Set ObjShell = Nothing If Not WinExist = True Then MsgBox "製品番号検索を開いてください。" Exit Sub End If ObjIE.Visible = True Do While i < 21 i = 1 Set elements = ObjIE.document.getElementsByName("partsno_0" & "i") If elements Is Nothing Then Exit Sub End If elements.Item(0).Value = Worksheets(1).Cells(i, 1).Value i = i + 1 Loop End Sub で、 elements.Item(0).Value = Worksheets(1).Cells(1, 1).Value が常にエラーになります。 間違っていはいないと思うんですが・・・・。 何がいけないのでしょうか。

  • VBのコードが理解できません 解説いただけないでしょうか?

    Dim ObjIE As Object Dim ObjShell As Object Dim ObjWindow As Object Dim WinExist As Boolean WinExist = False Set ObjShell = CreateObject("Shell.Application") For Each ObjWindow In ObjShell.Windows If TypeName(ObjWindow.Document) = "HTMLDocument" Then  WinExist = True  Set ObjIE = ObjWindow End If Next Set ObjShell = Nothing If Not WinExist = True Then Set ObjIE = CreateObject("InternetExplorer.Application") End If ObjIE.Navigate "http://nantokakantoka.html" ObjIE.Visible = True このコードを解説いただけないでしょうか? 特に WinExist For Each ObjWindow In ObjShell.Windows If TypeName(ObjWindow.Document) = "HTMLDocument" Then が何をしているのか分からないんです。

  • 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の方法でブラウザを開くメリットはあるのでしょうか?

  • VBAでWebに値を入力

    VBAでWebに値を入力する操作を考えています。 エクセルシートのA1に入っている値をWeb上に入力する操作なのですが、 以下のコードを実行すると「AllLog.keyword.Value = t」の部分でエラーになります。 googleではkeywordのところを「q」、yahooではkeywordのところを「p」にすれば問題ないのですが、 神奈川中央交通のページではエラーになってしまいます。 なぜですか?? Sub google() Dim objIE As InternetExplorer '参照設定:Microsoft Shell Controls and Automation Dim objShell As Shell Dim WinFlg As Boolean Dim objWin As Object Dim AllLog As Object On Error GoTo EndProcess Set objShell = New Shell For Each objWin In objShell.Windows If TypeName(objWin) = "IWebBrowser2" Then WinFlg = True Set objIE = objWin Exit For End If Next Set objShell = Nothing If WinFlg = False Then MsgBox "IEオブジェクトが取得できません", vbCritical Exit Sub End If EndProcess: If Err() > 0 Then MsgBox Err.Description End If With objIE Set AllLog = .Document.all t = Cells(1, 1) AllLog.keyword.Value = t End With Set objIE = Nothing End Sub

  • 起動しているIEをVBSで閉じるときの問題・・・

    VBスクリプトで起動しているIEを探し特定のサイトであればウィンドウを閉じたいのですがどのようにすればよいのでしょうか? Dim ObjIE Dim ObjShell Dim ObjWindow Dim WinExist WinExist = False Set ObjShell = CreateObject("Shell.Application") For Each ObjWindow In ObjShell.Windows If TypeName(ObjWindow.Document) = "HTMLDocument" Then WinExist = True Set ObjIE = ObjWindow End If Next Set ObjShell = Nothing If Not WinExist = True Then Set ObjIE = CreateObject("InternetExplorer.Application") End If If objIE.Document.URL = "http://www.yahoo.co.jp/" Then objIE.quit End If If objIE.Document.URL = "http://www.excite.co.jp/" Then objIE.quit End If If objIE.Document.URL = "http://www.google.co.jp/" Then ?????????? End If ・ ・ ・ 例えばディスプレイ上にYahoo、Excite、Googleのホームページがそれぞれ立ち上がっていたとします。 もしYahooがあれば閉じて次にExciteを探しあれば閉じて、次にGoogleのページがあればそのままにし後の処理を行わず終わらせたいのですが・・・もしGoogleが開いていればこれ以降の処理を全てすっ飛ばして終了にしたいのですが・・・ また、If thenを繰り返してばかりで汚いコードのような気もします。 これをやっていてYahoo、Excite、Google全て開いていた場合何故かエラーが出て終了してしまいます。 どなたかいい方法があれば教えて下さい。

  • VBSでとある条件の時に処理をやらずに終了させる方法

    VBSでとある条件の時に処理をやらずに終了させる方法で悩んでいます。 Dim ObjIE Dim ObjShell Dim ObjWindow Dim WinExist WinExist = False Set ObjShell = CreateObject("Shell.Application") For Each ObjWindow In ObjShell.Windows If TypeName(ObjWindow.Document) = "HTMLDocument" Then WinExist = True Set ObjIE = ObjWindow End If Next Set ObjShell = Nothing If Not WinExist = True Then Set ObjIE = CreateObject("InternetExplorer.Application") End If ・ ・ ・ ・ 例えばこのように起動しているIEを探します そこでもしYahoo!JAPANが起動していたら以降の処理をやらずに終わらせたいのですが・・・ どのような記述にすればよいでしょうか?

  • objIE  2個目のサイズが適用されません。

    VBAです。 Dim objShell As Object Dim objIE As New InternetExplorer Const READYSTATE_COMPLETE As Long = 4 Sub test1() Set objShell = CreateObject("Shell.Application") objIE.Visible = True objIE.Top = 0 objIE.Left = 0 objIE.Width = 100 objIE.Height = 100 objIE.navigate "http://www.goo.ne.jp/" objIE.Navigate2 "http://www.goo.ne.jp/", 2048 Set objIE = Nothing Set objShell = Nothing Set objShell = CreateObject("Shell.Application") objIE.Visible = True objIE.navigate "http://www.goo.ne.jp/" objIE.Navigate2 "http://www.goo.ne.jp/", 2048 'できない objIE.Top = 20 objIE.Left = 20 objIE.Width = 100 objIE.Height = 100 Set objIE = Nothing Set objShell = Nothing End Sub のように二つのブラウザを立ち上げて サイズを変えたいのですが 2個目のサイズが適用されません。 エラーにもなりません。 なぜでしょうか?

  • サイトのページの全体をコピーしてエクセルに貼り付け

    サイトのページの全体をコピーしてエクセルに貼り付けたいのですが http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1341770528 を参考にしたのですが Sub test() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "http://www.goo.ne.jp/" While objIE.ReadyState <> 4 DoEvents Wend objIE.ExecWB OLECMDID_SELECTALL, OLECMDEXECOPT_DODEFAULT '17,0 objIE.ExecWB OLECMDID_COPY, OLECMDEXECOPT_DODEFAULT '12 DoEvents Workbooks.Add DoEvents Range("A1").Select ActiveSheet.PasteSpecial Format:="テキスト", Link:=False, DisplayAsIcon:=False End Sub をしたのですが、うまくコピーできていません。 一番最後にコピーした文字がセルに張りついてしまいます。 なぜでしょうか?

  • IEを探すプログラムがうまくいきません。

    VBScriptで指定するサイトが開いていなかった場合とある処理を行い、とあるサイトが開いていれば別の処理をし終了させることをやっていますがうまくいきません。 自分の考えとしては 1・開いているIEをくるくるループ回して探す 2・その中にヤフーがあればフラグをTrue処理   それ以外はFalse処理 これだけで終わりにしたいのですが・・・ Dim objIE Dim objShell Dim objWindow Dim WinExist Dim strURL Dim Flug Dim strURL2 strURL = "http://www.yahoo.co.jp/" strURL2 = "http://www.google.co.jp/" 'IEが起動して無い場合プログラムが起動しないのでダミー立ち上げ Set objIE = WScript.CreateObject("InternetExplorer.Application") objIE.Navigate "about:blank" objIE.Visible = True Set objIE = Nothing WinExist = False Set objShell = CreateObject("Shell.Application") For Each objWindow In objShell.Windows If TypeName(objWindow.Document) = "HTMLDocument" Then WinExist = True Set objIE = objWindow End If Next If objIE.LocationURL = strURL Then Flug = True Else If objIE.LocationURL <> strURL Then Flug = False Else WScript.sleep(1) End If If Flug = False Then Set objIE = WScript.CreateObject("InternetExplorer.Application") objIE.Navigate strURL2 objIE.Visible = True Set objIE = Nothing End If ' 'いろいろな処理があるが省く ' If Flug = True Then msgbox "ヤフー存在" End If End If 絶対にフラグがTrueになることがありません。 Excelでデバッグしてみましたがなぜうまくいかないのかが理解できておりません。 自分としては開いているIEをぐるぐるとまず回ってヤフーが開いていればTrue時の処理を行い終了、 なければFalse時の処理を行うという風にしたいです(無限ループではありませんでした) For eachを使っているので途中でIf Flug以降の処理を行ってしまうのも無駄な繰り返しで困ってしまいます。 そこでフラグを立てることを考えたのですがどうも思うようにいきません。 ボキャブラリが足りませんが、いい知恵を貸していただけないでょうか?

  • VBでのContinueが間違っているとき

    http://oshiete1.goo.ne.jp/qa4564345.htmlではありがとうございました。 教わったことを参考にやってみたのですがうまくいきません。 Continueの部分がうまくいくPCといかないPCがあるのでどうしたらいいか分からなくなってしまいました・・・ Option Explicit Dim objIE Dim objShell Dim objWindow Dim WinExist Dim strURL Dim strURL2 Dim Flug strURL = "http://www.yahoo.co.jp/" strURL2 = "http://www.google.co.jp/" WinExist = False Set objShell = CreateObject("Shell.Application") For Each objWindow In objShell.Windows If TypeName(objWindow.Document) <> "HTMLDocument" Then Continue End If WinExist = True Set objIE = objWindow If objIE.LocationURL = strURL Then Flug = True Exit For End If Next If Flug = True Then msgbox "ヤフー存在" Else msgbox "別の処理を行なう" If WinExist = False Then 'IEが無い場合 起動する Set objIE = WScript.CreateObject("InternetExplorer.Application") objIE.Navigate strURL2 objIE.Visible = True Set objIE = Nothing End If End If

このQ&Aのポイント
  • CD/DVDラベル印刷で全体が表示されず、半円みたいになる
  • プリンターの印刷範囲が問題となり、CD/DVDラベル印刷の際に全体が正しく表示されない現象が発生しています。
  • 問題の原因を特定するために、ご利用の製品や状況について詳細をお知らせいただきました。
回答を見る

専門家に質問してみよう