[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『 IEの選択範囲を取得』(田吾作)
こんばんは、よろしくお願いいたします。
ウィンドウズ:XP(SP3) Excel:2002 ↑のPC環境で下記のマクロを使ってIE(うろ覚えですがIE7だったと思います)の選択範囲のテキストを 取得していました。
最近、ウィンドウズXPのマイクロソフトのサポート終了につき以前から所有しておりスタンドアローンで 使っていたウィンドウズVISTA/Excel2007のパソコンをネットに繋ぎました。
VISTA機はIEが7だったので、昨日ウィンドウズにSP1、SP2を当ててからIEを9にバージョンアップしました。
そうしたら、VISTA機のExcel2007で使えていた下記のマクロがWebページによってはエラーが出るように なってしまいました。昨日ウィンドウズ(VISTA)にSP1を当てる前まではどのWebページでも使えてました。
Sub ieget() Dim MyShell As Object, MyWindow As Object Dim iestr As String Set MyShell = CreateObject("Shell.Application") For Each MyWindow In MyShell.Windows If UCase(Right(MyWindow.FullName, 12)) = "IEXPLORE.EXE" Then iestr = MyWindow.Document.Selection.CreateRange.Text If iestr <> "" Then MsgBox iestr Else MsgBox "" End If End If Next MyWindow Set MyShell = Nothing End Sub
たとえば、↓のページの「商品説明」の内容を選択した状態でマクロ実行してもエラーにならずに文字を 取得できます。
http://page15.auctions.yahoo.co.jp/jp/auction/t368567379
しかし、↓ですと、文字を選択して実行したらエラーになります。
http://www.excel.studio-kazu.jp/kw/20140411084754.html
エラー内容は下記の通りです。
実行時エラー '438': オブジェクトは、このプロパティまたはメソッドをサポートしていません。
ページによってエラーになったりならなかったりする原因は何でしょうか? どのように書き換えたら回避できるでしょうか? ご指導お願いいたします。
< 使用 Excel:Excel2007、使用 OS:WindowsVista >
補足です。 エラーになる個所は↓の部分です。
iestr = MyWindow.Document.Selection.CreateRange.Text
よろしくお願いいたします。 (田吾作) 2014/04/12(土) 23:39
とりあえず、API関数を使う方法で取得できるようにはなりました。
Sub test2() Const OLECMDID_COPY = 12& Const OLECMDID_SELECTALL = 17& Const OLECMDEXECOPT_DODEFAULT = 0& Dim CB As New DataObject Dim iestr As String Dim MyShell As Object, MyWindow As Object Set MyShell = CreateObject("Shell.Application") For Each MyWindow In MyShell.Windows If UCase(Right(MyWindow.FullName, 12)) = "IEXPLORE.EXE" Then AppActivate MyWindow MyWindow.ExecWB OLECMDID_COPY, OLECMDEXECOPT_DODEFAULT With CB .GetFromClipboard iestr = .GetText MsgBox iestr End With Exit For End If Next End Sub
ただ、この方法はクリップボードを使いますので、最初にご呈示させていただいたコード を一部修正していけるのならご教示いただきましたら幸いです。よろしくお願いいたします。 (田吾作) 2014/04/13(日) 11:05
不格好なコードですが、下記のコードで誤魔化すことにしました。
'参照設定:Microsoft Forms 2.0 Object Library
Sub ieget() Dim MyShell As Object, MyWindow As Object Const OLECMDID_COPY = 12& Const OLECMDID_SELECTALL = 17& Const OLECMDEXECOPT_DODEFAULT = 0& Dim CB As New DataObject Dim iestr As String Dim cbstr As String Dim flg As Boolean Set MyShell = CreateObject("Shell.Application") For Each MyWindow In MyShell.Windows If UCase(Right(MyWindow.FullName, 12)) = "IEXPLORE.EXE" Then flg = False Err.Clear On Error Resume Next 'IE選択範囲テキスト取得 iestr = MyWindow.Document.Selection.CreateRange.Text 'エラー番号438の場合 If Err.Number = 438 Then flg = True 'クリップボード内容記憶 With CB .GetFromClipboard cbstr = .GetText End With 'IEウィンドウアクティブ化 AppActivate MyWindow 'IE選択範囲クリップボード格納 MyWindow.ExecWB OLECMDID_COPY, OLECMDEXECOPT_DODEFAULT 'クリップボード内容取得 With CB .GetFromClipboard iestr = .GetText End With End If 'エラー番号438の場合 If flg = True Then '記憶しておいたクリップボード内容書き戻し With CB .SetText cbstr .PutInClipboard End With End If On Error GoTo 0 'エクセルウィンドウアクティブ化 AppActivate Application.Caption 'IE選択範囲テキスト表示 If iestr <> "" Then MsgBox iestr Else MsgBox "" End If End If Next MyWindow Set MyShell = Nothing End Sub (田吾作) 2014/04/15(火) 01:16
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.