前提・実現したいこと
VBAで、Webサイトから、以下の「取得したい要素①~③」の値を抽出したいと思っています。
サイトの構造は簡単に書くと以下のようになっています。
取得したい要素は、テキストボックスに入力されている値です。
取得したいページのソースコード
html
1<section id="AAA" Class="BBB"> 2 <form> 3 <div Class="CCC">...</div> 4 <div Class="CCC">...</div> 5 <div Class="DDD"> 6 <div Class="EEE"> 7 <div Class="DDD">...</div> 8 <div Class="DDD">...</div> 9 <div Class="DDD"> 10 <div Class="FFF">...</div> 11 <div Class="GGG"> 12 <table Class="HHH"> 13 <tbody> 14 <tr> 15 <th>あああ</th> 16 <td> 17 <div Class="III"> *取得したい要素① 18 </td> 19 </tr> 20 <tr> 21 <th>いいい</th> 22 <td> 23 <input type="JJJ" name="KKK" value class="LLL"> *取得したい要素② 24 </td> 25 </tr> 26 <tr> 27 <th>ううう</th> 28 <td> 29 <input type="JJJ" name="KKK" value class="LLL"> *取得したい要素③ 30 </td> 31 </tr> 32 </tbody> 33 </table> 34 </div> 35 </div> 36 </div> 37 </div> 38 </form> 39</section> 40 41<div Class="MMM">...</div> *ボタン① 42<div Class="NNN">...</div> *ボタン①を押すと開くポップアップウィンドウ 43<div Class="OOO">...</div> *ボタン② 44<div Class="PPP"> *ボタン②を押すと開くポップアップウィンドウ 45 <div id="QQQ" class="RRR"> 46 <div Class="SSS"> 47 <div Class="TTT"> 48 <div Class="UUU"> 49 <div id="VVV" class="WWW"> 50 <aside>...</aside> *ここのtdが取得される 51 <main>...</main> *ここのthが取得される 52 </div> 53 </div> 54 </div> 55 </div> 56 </div> 57</div> 58 59</div> 60 61
試したこと
以下のサイト等を参考にしてgetElementsを試しました。
https://dailyrecords.blog/archives/5052
https://tonari-it.com/vba-ie-get-table/
試したソースコード
以下は共通部分です。
vba
1Dim objIE As InternetExplorer 2Set objIE = New InternetExplorer 3 4'****指定した案件の詳細ページを開く*** 5 '※以下はページを表示するために行っていることなのであまり気にしないでください 6 7 Dim matterNumber As String '番号 8 Dim pageNumber As String '番号の下4桁(URL生成用) 9 10'番号を入力するボックスを表示 11 matterNumber = InputBox("案件番号を入力してください") 12 13'番号の下4桁を取得 14 pageNumber = Right(matterNumber, 4) 15 16'URL末尾に番号を付け加える 17 objIE.Visible = True 18 objIE.navigate "※取得したいページのURL※" & pageNumber 19 20'応答があるまで待つ 21 Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE 22 DoEvents 23 Loop
上記の下に次のコードを記述して実行すると、
<div id="VVV" class="WWW">の要素が取得されます。 これはボタンを押すと、取得したいページの上に開くポップアップウィンドウの要素です。 th→tdにすると取得される値は変わるものの、同様のウィンドウの要素なことは変わりません。 ``` Dim i As Integer i = 1 For Each element In objIE.document.getElementsByTagName("th") Cells(i, 1) = element.innerText i = i + 1 Next ```以下の場合、
「実行時エラー'438':オブジェクトは、このプロパティまたはメソッドをサポートしていません」と表示され、elementの値は「empty値」となります。
Dim i As Integer i = 1 For Each element In objIE.document.getElementsById("AAA") Cells(i, 1) = element.innerText i = i + 1 Next
###最後に
初心者なものでどこをどう削れば良いか分からず、大変長くなってしまい申し訳ありません。
getElementsの使い方も理解できていない点が多いので、ここをこうすると取得できるのではないかというものがありましたら、教えていただけると嬉しいです。
また、不足している情報がありましたら、追記しますので、よろしくお願いいたします。