[[20210824105328]] 『VBAによるIE操作』(696) ページの最後に飛ぶ

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

 

『VBAによるIE操作』(696)

掲示板過去ログを参照しまして

?@ここのサイト(ttps://www.idaten.ne.jp/portal/)にアクセスして
?Aエクセルに記録しておいたIDパスを代入して
?Bログインボタンを押す。
・・・という挙動のコードを組んだつもりなのですがIDパスの代入が上手くいきません。

オブジェクト取得までは出来ているようですし、特にフレームで別枠ということでもなさそうなのですが原因もわからず対策が出来ませんでした。助言を頂けないかと思い投稿いたします。


'強制的に最前面にさせる
Private Declare PtrSafe Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As Long
'最小化されているか調べる
Private Declare PtrSafe Function IsIconic Lib "user32" (ByVal hWnd As Long) As Long
'元のサイズに戻す
Private Declare PtrSafe Function ShowWindowAsync Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long

'最前面表示
Public Sub ログイン_H17()

    'IEを格納する変数(オブジェクト型)
    Dim ie As Object
    'IEを起動
    Set ie = CreateObject("InternetExplorer.Application")
    ie.Visible = True
    ie.Navigate2 (Range("H19"))

    '最小化されている場合は元に戻す(9=RESTORE:最小化前の状態)
    If IsIconic(ie.hWnd) Then
        ShowWindowAsync ie.hWnd, &H9
    End If
    '最前面に表示
    SetForegroundWindow (ie.hWnd)
    'ブラウザ(IE)読み込み完了待ち
    While ie.Busy = True Or ie.ReadyState < READYSTATE_COMPLETE
        DoEvents
        Wend

     'IEオブジェクトのドキュメントプロパティを変数docに保存
    Dim doc As HTMLDocument
    Set doc = ie.document
    Dim inp As HTMLInputElement

     'ログインID
    Set inp = doc.getElementsByName("IdatenUserId")(0)
    inp.Value = Range("H17")

     'パスワード
    Set inp = doc.getElementsByName("IdatenPassWord")(0)
    inp.Value = Range("H18")

    'nameとかID設定がないので、何番目かのformのsubmit実行命令で対処
    ie.document.forms(2).submit

 End Sub

< 使用 Excel:Office365、使用 OS:Windows10 >


 さらっとHTMLソースを眺めましたが、同じ名前の要素が2つあります。
 Set inp = doc.getElementsByName("IdatenUserId")(1)
 Set inp = doc.getElementsByName("IdatenPassWord")(1) 
 だとおもいますよ。
 もっとキッチリ指定できる方法を考えたのがよろしいかと思います。
(´・ω・`) 2021/08/24(火) 11:43

解決しました、ありがとうございます!
とりあえず動けばいい、で作ってしまったせいですね。

もうちょっとユニークな指定になるよう再考致します。
(696) 2021/08/24(火) 11:55


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.