ExcelからIEの位置制御

ExcelでIEを開くとき、HTMLでid=detal1で指定した位置がウインドウの最上段になるように移動させたい。スクロールがベストだがそれ以外でもよしとする。

このHTML中ではなんでもないことが、Excelからとなるとちょっと厄介だ。要素の値の取得はそれほどでもないが、アンカーの位置を取得できない。考えあぐねた結果、下記のようなコードになりました。今回は全ソースを掲載します。

Option Explicit
#If VBA7 And Win64 Then
'  ' 64Bit 版
    Private Declare PtrSafe Function SetForegroundWindow Lib "user32.dll" (ByVal hWnd As Long) As LongPtr
    Private Declare PtrSafe Function IsIconic Lib "user32" (ByVal hWnd As Long) As LongPtr
    Private Declare PtrSafe Function ShowWindowAsync Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As LongPtr
    Private Declare PtrSafe Function ShowWindow Lib "user32" (ByVal hwindow As Long, ByVal cmdshow As Long) As LongPtr
#Else
  ' 32Bit 版
    Private Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hWnd As Long) As Long
    Private Declare Function IsIconic Lib "user32" (ByVal hWnd As Long) As Long
    Private Declare Function ShowWindowAsync Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
    Private Declare Function ShowWindow Lib "user32" (ByVal hwindow As Long, ByVal cmdshow As Long) As Long
#End If

Sub 閲覧()
  Dim objIE As Object
 
  Set objIE = CreateObject("InternetExplorer.application")
  objIE.Visible = False
  objIE.Navigate "http://www.eonet.ne.jp/
 
  Do While objIE.Busy Or objIE.ReadyState <> 4
    DoEvents
  Loop
 
  Application.Wait Now() + TimeValue("00:00:01")
     
  objIE.Visible = True
   
 '最小化されている場合は元に戻す(9=RESTORE:最小化前の状態)
  If IsIconic(objIE.hWnd) Then
     ShowWindowAsync objIE.hWnd, &H9
  End If
     
  #If VBA7 And Win64 Then
     Dim Maxit As LongPtr    'APIのリターン値
  #Else
     Dim Maxit As Long    'APIのリターン値
  #End If
  Maxit = ShowWindow(objIE.hWnd, 3)   '<-- ウインドウ最大化
     
  SetForegroundWindow (objIE.hWnd) '<-- アクティブに

  Dim element As String
  element = objIE.document.getElementById("detail1").ScrollIntoView(True)

End Sub
 

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント