前提・実現したいこと
VBAで取得済みIEのHTMLを取得すること
発生している問題・エラーメッセージ
<HTMLの取得について> Call tagClick(objIE, "a", "文字列1") はうまくいくのですが、 Debug.PrintobjIE.document.all(0).outerHTML Call tagClick(objIE, "a", "文字列2") がうまくいきません。エラーは出ませんが、リンクをクリックできません。
該当のソースコード
VBA
1 2 3'-----------------------Main------------------------ 4Sub Main() 5 Dim objIE As InternetExplorer 6 Dim objLink As Object 7 8 Call ieView(objIE, "ログイン画面のURL") 9 10 objIE.document.getElementsByName("IDのHTML")(0).Value = "ID" 11 objIE.document.getElementsByName("PASSのHTML")(0).Value = "PASS" 12 objIE.document.getelementbyid("ログインボタンのHTML").Click 13 14 Set objIE = 最新画面 15 Call ieCheck(objIE) 16 Call tagClick(objIE, "a", "文字列1") 17 18 Set objIE = 最新画面 19 Call ieCheck(objIE) 20 21 22 23'以下問題個所 ↓>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 24 25 26 27 Debug.Print " URL:" & objIE.document.Url 28 Debug.Print objIE.document.all(0).outerHTML 29 30 Call tagClick(objIE, "a", "文字列2") 31 32'問題点_______________________________________________ 33Call tagClick(objIE, "a", "文字列1") 34はうまくいくのですが、 35 36Debug.PrintobjIE.document.all(0).outerHTML 37Call tagClick(objIE, "a", "文字列2") 38がうまくいきません。 39 40IEオブジェクトを紛失していると思い、再取得のコードを付け加えた(最新画面)のですが、うまくいきませんでした。Debug.Print " URL:" & objIE.document.Url 41で操作したいIEオブジェクト(objIE)を掴んでいることは確認済みです。しかし、そのIEオブジェクトのHTMLが一切操作できません。機密性の問題でしょうか? 42'_________________________________________________ 43 44 45 46 47'以上問題個所 ↑>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 48 49 50 51 52End Sub 53'-----------------ieView---------------------- 54Sub ieView(objIE As InternetExplorer, urlName As String, Optional viewFlg As Boolean = True) 55 Debug.Print ">>> ieView" 56 Set objIE = CreateObject("InternetExplorer.Application") 57 58 objIE.Visible = viewFlg 59 60 objIE.navigate urlName 61 62 Call ieCheck(objIE) 63End Sub 64'-----------------ieCheck------------------- 65Sub ieCheck(objIE As InternetExplorer) 66 Debug.Print ">>> ieCheck" 67 Dim timeOut As Date 68 timeOut = Now + TimeSerial(0, 0, 20) 69 Do While objIE.Busy = True Or objIE.readyState <> 4 70 DoEvents 71 If Now > timeOut Then 72 objIE.Refresh 73 timeOut = Now + TimeSerial(0, 0, 20) 74 End If 75 Loop 76 timeOut = Now + TimeSerial(0, 0, 20) 77 Do While objIE.document.readyState <> "complete" 78 DoEvents 79 If Now > timeOut Then 80 objIE.Refresh 81 timeOut = Now + TimeSerial(0, 0, 20) 82 End If 83 Loop 84End Sub 85'---------------------tagclick------------------ 86Sub tagClick(objIE As InternetExplorer, tagName As String, tagStr As String) 87 Debug.Print ">>> tagclick" 88 89 Dim objTag As Object 90 91 For Each objTag In objIE.document.getElementsByTagName(tagName) 92 Debug.Print " L___ " & objTag.innerHTML 93 If InStr(objTag.outerHTML, tagStr) > 0 Then 94 objTag.Click 95 Call ieCheck(objIE) 96 Exit For 97 End If 98 Next 99End Sub 100'--------------------最新画面----------------- 101Function 最新画面() As Object 102 Debug.Print ">>> 最新画面" 103 Dim objShell As Object, n As Long 104 Set objShell = CreateObject("Shell.Application") 105 For n = objShell.Windows.Count To 1 Step -1 106 If TypeName(objShell.Windows(n - 1).document) = "HTMLDocument" Then 107 Set 最新画面 = objShell.Windows(n - 1) 108 Exit For 109 End If 110 Next n 111 Debug.Print " L___ Title: " & 最新画面.document.Title 112 Set objShell = Nothing 113 114 115 116 117End Function 118'----------------------getLink------------------- 119Sub goLink(objIE As InternetExplorer, str As String) 120 Debug.Print ">>> goLink: " & str 121 For Each Tag In objIE.document.getElementsByTagName("a") 122 If InStr(Tag.innerHTML, str) > 0 Then 123 Tag.Click 124 Call ieCheck(objIE) 125 Exit For 126 End If 127 Next 128End Sub 129 130 131
試したこと
IEオブジェクトを紛失していると思い、再取得のコードを付け加えた(最新画面)のですが、うまくいきませんでした。
Debug.Print " URL:" & objIE.document.Url
で操作したいIEオブジェクト(objIE)を掴んでいることは確認済みです。
しかし、そのIEオブジェクトのHTMLが一切操作できません。機密性の問題でしょうか?
補足情報(FW/ツールのバージョンなど)
Excel 2016 32 bit
InternetExplorer 11
サイトの保護モードはすべて有効
回答3件
あなたの回答
tips
プレビュー