質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Windows 7

Microsoft Windows 7は過去にリリースされたMicrosoft WindowsのOSであり、Windows8の1代前です。2009年の7月にリリースされ販売されました。Windows7の前はWindowsVistaで、その更に3年前にリリースされました。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

WSH

WSH(Windows Script Host)とは、Windows上でテキストファイルに記述したJavaScriptやVBScriptなどのスクリプトを実行するホスト環境のことです。COMを通じたレジストリ操作やWMIへのアクセスが可能で、複雑な処理も行うことができます。

Q&A

解決済

1回答

3295閲覧

VBScriptで開かれているIEをオブジェクトとして取得するのがうまくいきません

SUN_LIGHT

総合スコア14

Windows 7

Microsoft Windows 7は過去にリリースされたMicrosoft WindowsのOSであり、Windows8の1代前です。2009年の7月にリリースされ販売されました。Windows7の前はWindowsVistaで、その更に3年前にリリースされました。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

WSH

WSH(Windows Script Host)とは、Windows上でテキストファイルに記述したJavaScriptやVBScriptなどのスクリプトを実行するホスト環境のことです。COMを通じたレジストリ操作やWMIへのアクセスが可能で、複雑な処理も行うことができます。

0グッド

0クリップ

投稿2019/07/24 15:26

編集2019/07/24 15:31

VBScriptでIEを開いていろいろ操作していて
一番最初に使うページを既に開いているIEがあった場合
新たにオブジェクトを作るのではなく
既存のIEをオブジェクトとして取得・操作したいなと考えたのですが
その既存のIEを取得する処理がうまくいきません

'Webからお借りした記述 Dim objShell Dim objIE Set objShell = WScript.CreateObject("Shell.Application") For Each objIE In objShell.Windows() If InStr(LCase(objIE.FullName), "iexplore.exe") Then WScript.Echo objIE.LocationURL End If Next Set objShell = Nothing

VBScript

1'エラーを直そうと試みた結果お借りした記述からいくらか変更が加えてあります 2Dim objIE 3Dim objIEs 4Dim objShell 5Set objShell = CreateObject("Shell.Application") 6Dim URLX 7Dim URLs 8URLs = Array("https://www.google.com/") 9 10Function IELOOP(URLX) 11 For Each objIEs In objShell.Windows 12 If InStr(LCase(objIEs.FullName), "iexplore.exe") Then 13 IF objIEs.LocationURL = URLX Then 14 IELOOP = objIEs 15 Exit For 16 End IF 17 End IF 18 Next 19End Function 20 21Sub Tests() 22 IF IELOOP(URLs(0)) = "" Then 23 Set objIE = CreateObject("InternetExplorer.Application") 24 objIE.Navigate2 URLs(0) 25 Else 26 Set objIE = IELOOP(URLs(0)) 27 End IF 28 objIE.Visible = True 29End Sub 30 31Call Tests

上記のプログラムを
https://www.google.com/を開いているIEがいる状態
(Tests内のElse文が実行される状態)で実行すると
オブジェクトがありません: "objIE"というエラーメッセージが表示されます
IELOOP(URLs(0))の結果としてInternet Explorerが返ってくるらしいのですが
これがどうやらCreateObject("InternetExplorer.Application")で作られる
"Internet Explorer"とは別物だと判定され
結果objIEには操作できるオブジェクトがないものと扱われるからではないかと推測しています
(返される内容はWScript.echoを使って確認しました)

何故CreateObjectIELOOPで返される値が別なのか
IELOOPから返される値や
objIEに代入する値を整形して
操作できるオブジェクトとして挿入する方法はあるのか
教えていただけるとありがたいです

目当てのURLが開かれているIEの取得・代入自体は
お借りした記述をSubのままにすることでできているのですが…

VBScript

1Dim objIE 2Dim objShell 3Set objShell = WScript.CreateObject("Shell.Application") 4Dim URLX 5Dim URLs 6URLs = Array("https://www.google.com/","https://www.yahoo.co.jp") 7 8Sub IELOOP(URLX) 9 For Each objIE In objShell.Windows 10 If InStr(LCase(objIE.FullName), "iexplore.exe") Then 11 WScript.echo objIE.LocationURL 12 IF objIE.LocationURL = URLX Then 13 WScript.Echo objIE.LocationURL 14 Exit For 15 End IF 16 End IF 17 Next 18End Sub 19 20Sub Tests() 21 Call IELOOP(URLs(0)) 22 objIE.Visible = True 23End Sub 24 25Call Tests

こちらはこちらでURLを探させるたびにウィンドウの数ぶん出てくる
WScript.echo objIE.LocationURLが鬱陶しく
どちらか1つでもエスケープさせるとエラーになってしまいます…
(オブジェクトがありません: "objIE"と出ます)
私では何故WScript.Echoを噛ませないとエラーになるのかまるでわかりません…
こちらもあわせてご指導いただけるとありがたいです

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

FunctionのIELOOP内で戻り値を設定するところでもSetが必要です。
このため、IELOOPの戻り値がNothingになっています。

投稿2019/07/25 00:43

YAmaGNZ

総合スコア10222

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SUN_LIGHT

2019/07/25 13:02 編集

ありがとうございます! しっかりIEオブジェクトを返してくれるようになりました! Setが必要ということは盲点でした…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問