[[20140412232156]] 『 IEの選択範囲を取得』(田吾作) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『 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.