プロが教える店舗&オフィスのセキュリティ対策術

EXCEL VBA で VBAサンプルを参考にして、下記により、URLの内容を得ようとしていますが、できません。 どうも、URL画面の中に インプット用の記述があると、できなくなるのでは、と推測していますが、できるケースもあるようです。解決方法があるようでしたら、教えていただけますでしょうか? (Win7 64B EXCEL2010 IE11です。)'

Sub URL取得TEST()
On Error GoTo Er1
Dim StrUrl As String

StrUrl = InputBox("URLを指定", "URL入力", "http://www3.nhk.or.jp/nhkworld/") ' これは 読み込めます
StrUrl = InputBox("URLを指定", "URL入力", "http://uwl.weblio.jp/") ' これが読み込めません

Dim objIE As Object
Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True
objIE.FullScreen = False
objIE.Top = 200
objIE.Left = 100
objIE.Width = 800
objIE.Height = 600

objIE.navigate StrUrl
While (objIE.readyState <> 3 And objIE.readyState <> 4) Or objIE.busy = True
DoEvents
Wend
DoEvents

Workbooks.Add
objIE.ExecWB 17, 0
objIE.ExecWB 12, 0
Sheets.Add
ActiveSheet.name = "Format テキスト"
Range("A1").Select
ActiveSheet.PasteSpecial Format:="テキスト"

objIE.ExecWB 17, 0
objIE.ExecWB 12, 0
Sheets.Add
ActiveSheet.name = "FormatHTML"
Range("A1").Select
ActiveSheet.PasteSpecial Format:="HTML" '別のURLでテキストOKでこれはだめというケースあり
'
objIE.Quit
Set objIE = Nothing
Exit Sub
'
Er1:
objIE.Quit
Set objIE = Nothing
End Sub

gooドクター

A 回答 (9件)

試してみて



objIE.navigate StrUrl
While (objIE.readyState <> 3 And objIE.readyState <> 4) Or objIE.busy = True
DoEvents
Wend
DoEvents

objIE.Document.body.Focus
    • good
    • 2

IE11と言う事で「拡張保護モード」が有効になってるのではないでしょうか。


無効にされるとか。

この回答への補足

「拡張保護モード」は 無効となっていました。
ほかの方の別方法でも、ある方はダメだったというように、PCの設定等で なにかにより、微妙な支障がでてくるということなのでしょうか
ありがとうございました。

補足日時:2013/12/28 05:46
    • good
    • 0

>単純に このままでは 不能なのでしょうか


>JavaScriptだから、何かの設定が必要とかがあるのでしょうか

確認してみましたが、示されてる「Weblio英単語帳」のページでは上手くいきますが。

この回答への補足

示していただいた内容を 

While (objIE.readyState <> 3 And objIE.readyState <> 4) Or objIE.busy = True
DoEvents
Wend
DoEvents

objIE.document.forms("login").Item("email").blur

Workbooks.Add

と修正して、試しましたが、Workbooks.Add へ いかずに Er1:エラーへ 移動します。
なにかの 原因・影響があるのでしょうか?

補足日時:2013/12/22 15:43
    • good
    • 0

ExecWBでなくても、


objIE.Document.body.createTextRange.execCommand "Copy"
で可能かも。

この回答への補足

ためしてみましたが、『「空欄」のテキストエリア(=ログインメールアドレスの欄)が選択されてしまうため  ---』という部分で、不能になっているようです。
なにもないページでは、できました。

補足日時:2013/12/22 07:36
    • good
    • 0

>objIE.document.forms("login").Item ("email"), Blur()


失礼。JavaScriptの構文なので()は余計でした。ついでに.のはずがカンマになってました。
objIE.document.forms("login").Item ("email").Blur

この回答への補足

単純に このままでは 不能なのでしょうか
JavaScriptだから、何かの設定が必要とかがあるのでしょうか

補足日時:2013/12/22 07:39
    • good
    • 0

#1です。

補足に対しまして・・・

例えば1個目のURLは、IEの通常操作でページを開くと、「ページそのもの」にフォーカスがある(と思われます)ので、そのままの状態ですべて選択(Ctrl+A)でコピペできますが、2個目のURLの場合、開いた時点で「空欄」のテキストエリア(=ログインメールアドレスの欄)が選択されてしまうため、空のテキストエリアから全て選択しようとしても、空ですので当然何も選択されません。
(これが例えばテキストエリアにデフォルト仕様で何か文字が入力されている場合、その文字列がコピーされエクセルに貼り付けられるかと思います)

私の知識が不足していたために汎用性のある解決法が思い付きませんでしたが、#3の方が回答されているように「objIE.Document.body.Focus」を追加することで基本的にどのURLでも貼り付けられるようになるかと思います。
(私も勉強になりました、ありがとうございます。。。)
#3の方の補足で「他のウェブページが開いていると~」とありましたが、少なくとも私の環境ではその状態でも問題無く動作しました。。
    • good
    • 0

直前の回答者ですけど



実行時に、ほかのウェブページを表示していると

下のコードを使ってもだめみたいです。

objIE.Document.body.Focus
    • good
    • 0

私も知らなかったので「html Focus 外す」でググりました。


objIE.navigate StrUrl
While (objIE.readyState <> 3 And objIE.readyState <> 4) Or objIE.busy = True
DoEvents
Wend
DoEvents
objIE.document.forms("login").Item ("email"), Blur()
「Weblio英単語帳~TOEICやTOEFLなどの勉強にも使える英語学習サービス~」で、
ログインメールアドレスのテキストボックスにフォーカスが当たってるのでそれを外すとか。

この回答への補足

Blur() のところで ストップしています
どんな DIM が 必要なのでしょうか
お教えください。

補足日時:2013/12/21 12:10
    • good
    • 0

対象のURLを開いた際にCtrl+Aを押してみて、ページ全体が選択されれば読み込めるページ、何も選択されなければ読み込まれないページかと思います。


開いた際に例えばテキストエリアにフォーカスが移動されてしまうようなページは(検索サイト系はそのような所が多そうですが)、そのままではページ全体の選択がされないため読み込まれなくなってしまうかと思います。

例えば質問文にある2個目のURLはTABを2回押してフォーカスをテキストエリアの外に出してやった後にExecWB 17, 0で選択できますので DoEvents の下あたりに

SendKeys "{tab}"
SendKeys "{tab}"

のような記述を追加してやればとりあえずこのケースでは解決できると思いますが、この方法ではURL毎に対処法を変えてやる必要がありそうなのであまり良い回答ではないかと思われます。。。
(例えば、YahooのトップページなどはTABを7回ぐらい押してやっとフォーカスが外れます)

もしかしたら他の方がもっと汎用性のある解決法を提示してくださるかもしれませんm(_ _)m

この回答への補足

『開いた際にCtrl+Aを押してみて』というのは、タイミングがあるのでしょうか?
どんな状態が 『ページ全体が選択される』『されない』なのかを 具体的に教えていただけますでしょうか?
下段の回答のほうは、うまくできました。

補足日時:2013/12/21 11:56
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

人気Q&Aランキング