プルダウンの項目をVBAでクリックしたい
VBAでとあるWEB上のプルダウンの項目をクリックしたいのですが、
調べても項目の表示の変更がされるだけでクリックがされるものが載っていません。
説明が下手で申し訳ございませんが、手動でそのプルダウンをクリックしますと
項目をクリックした瞬間にその専用ページに遷移します。
が、作成したVBAで行うと項目の表示の変更が行われるだけでページが遷移しません。
関係上WEBコードすべてを載せることはできませんが、以下のようなコードになっています
該当のソースコード
<select name="swich_team"> ==0 <option value="1a2b3c4d-5e6f-7g8h9i" selected> team1</option> <option value="9i8h7g-6f5e-4d3c2b1a" selected>team2</option> </select> ・・・ の「team2」のボタンをクリックしたい。
試したコード(VBA)
#If VBA7 Then Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As LongPtr) #Else Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long) #End If '接続先URL Public Const url1 As String = "https://XXXXXXXXXXXXXXXXXXXXXXXXX" Sub main() Dim objIE As InternetExplorer Dim objInpSel As HTMLSelectElement 'IE(InternetExplorer)のオブジェクトを作成する Set objIE = CreateObject("InternetExplorer.Application") 'IEを表示させurl1のページを表示する objIE.Visible = True objIE.navigate url1 'IEの表示を待つ Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE DoEvents Loop 'ID入力 objIE.document.getElementsByName("XXXXXXXXXXXXXXXXXX")(0).Focus objIE.document.getElementsByName("XXXXXXXXXXXXXXXXXX")(0).Value = "XXXXXXXXXXXXXXXXXXXXXXXXXXX" 'PW入力 objIE.document.getElementsByName("password")(0).Focus objIE.document.getElementsByName("password")(0).Value = "XXXXXXXXXXXXXXXX" 'ログインボタンをクリック objIE.document.getElementsByName("login")(0).Click Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE DoEvents Loop 'プルダウンからTeam変更 objIE.document.querySelector("[name=switch_team] option:nth-child(2)").Click Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE DoEvents Loop '======================================== 'Teamを選択 ' Set objInpSel = objIE.document.getElementsByName("switch_team")(0) 'セレクトボックスを選択 ' objInpSel.selectedIndex = 1 ' Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE ' DoEvents ' Loop '======================================== MsgBox "終了しました" End Sub
ちなみに直接URL開けばいいんじゃないかと思い、調べましたが
「team1」「team2」で表示されるURLは同じものでした。(すみませんHTMLの知識があまりないので理由はわかりませんが「team1」「team2」で表示されるページ内容は明らかに違います)
上記方法がわかる方、ご教示頂けますでしょうか。
何卒よろしくお願いいたします。
objIE.document.getElementsByName("swich_team")(0).Click ではダメでしたか?
Set objInpSel = objIE.document.getElementsByName("swich_team")(0)
objInpSel.selectedIndex = 1
objIE.document.getElementsByName("swich_team")(0).Click
で実施しましたが、遷移はしませんでした。
項目の表示はteam2になったままです。
ああ、optionをクリックしなきゃいけないんですね?
objIE.document.querySelector("[swich_team] option:nth-child(2)")(0).Click
とかはどうでしょう?
実行時エラー:13;
型が一致しません。
というエラーとともにデバックを押すと上記の文章がさされてしまいます。
querySelectorは初めて見たので自分でも調べてみます。
あ、すみません、間違えました。
objIE.document.querySelector("[swich_team] option:nth-child(2)").Click
テストできれば話が早いのですが……
じゃないですね。
objIE.document.querySelector("[name=swich_team] option:nth-child(2)").Click
何度もアドバイス頂きありがとうございます。
上記のコードで実行しましたが、今度は項目も変更されませんでした。
似たような仕様のサイト(プルダウン選択クリック時に遷移するサイト)があれば、ご紹介できるのですが、、、
見つけ次第ご連絡はさせていただきます!!
五月雨で失礼いたします!
まったく一緒ではありませんが以下のサイトはプルダウンで
サイト内の表示は変わるので似たような仕様かもしれません!
https://www.apple.com/jp/iphone/compare/
少なくとも、JavaScriptで
document.querySelector("[name=swich_team] option:nth-child(2)").click()
なら動作することを確認しました。
また、
objIE.document.querySelector
と、
.Click
が動作することも確認できています。
なので、あとはセレクタの取り方だと思うのですが……
ところで、そのアップルのページ、IE11だとスクリプトエラーで動作していないような気がします。
JavaScriptを触ったことがあまりないので
根拠があるコメントでもないですが
VBAで作成していたのでそれで動作しないんでしょうか。
>ところで、そのアップルのページ、IE11だとスクリプトエラーで動作していないような気がします。
→すみません、対応していないみたいですね・・・
Chromeデベロッパーツールを使いながらサイトを探していたので
見つけた嬉しさでIEでためしていませんでした・・・;;
こちらもVBA(エクセルのマクロ)で試していますよ。
ローカルにサーバ立てて試してみましたが、
objIE.document.querySelector("[name=swich_team] option:nth-child(2)").Click
で動作しました。
なので、あとは環境の問題か、ご提示いただいてない部分のコードに問題があるのかと思います。
試したコードに関してどうしても開示できない部分はマスクしてそれ以外はすべて載せました!
objIE.document.querySelector("[name=swich_team] option:nth-child(2)").Click
に関しては実行するとログインまで行き、上記コードを無視(?)1してMsgBoxを出す状況です!
============で区切ってコメントアウトしている部分に関しては
有効にして実行すると表示の変更がされるだけでクリックがされず、
objIE.document.getElementsByName("swich_team")(0).Click
は最初に記載しました通り、遷移は行われませんでした・・・
回答1件
あなたの回答
tips
プレビュー