VBAでIEを操作してます。
ASPのサイト(?)のあるページに、人の名前が書いてあるプルダウンメニューがあり、選択するとページ内の表が、対象者の表に変わるといったページです。
シートに対象者を書き出し、対象者の表を取り出すコードを書いていたのですが、プルダウンメニューや表のところでおかしな挙動がみられました。
②でエラー70「書き込みできません。」が出て、何もせず、もう一度実行させると普通に動き出しました。
そしてそのあとにあるプルダウンメニューの中を全て書き出す際に、初めから書かずに、途中から書き出しました。しかも毎回違う人から書き出しました。ブレイクポイントを設けて、書き出した後に止めて、カーソルを戻し、もう一度書き出すところから実行させると、今度は狙い通りに初めから書き出し始めてくれます。
さらにそもそも②の箇所にいく前に、①の後の2文を書いて置かないと、kのカウントが125でFOR文を抜け出てしまうというバグがありました。(kが130のときもありました)
動きが非常に不安定で、どうにかならないでしょうか?
VBA
1Sub IE() 2 3 Dim lst() As String'対象者 4 Dim num() As Integer'対象者のプルダウンのIndex 5 Dim RE As Integer'対象者の数 6 'i=行用、j=列用、k=HTML用、l=lst用 7 Dim i As Integer 8 Dim j As Integer 9 Dim k As Integer 10 Dim l As Integer 11 Dim nlst(500) As Integer 12 13 '対象者の読み込み 14 Worksheets("list").Select 15 i = 0 16 17 RE = Cells(Rows.Count, 2).End(xlUp).Row - 1 18 ReDim lst(RE) 19 ReDim num(RE) 20 21 Do While Cells(i + 2, 1) <> "" 22 lst(i) = Cells(i + 2, 1) 23 i = i + 1 24 Loop 25 26 27 'IEの起動 28 Set objIE = CreateObject("InternetExplorer.Application") 29 objIE.Visible = True 30 objIE.navigate "http://www.*********************" 31 32 Call IEwait(objIE) 33 34 'ログインして、指定のページまで進む 35 Set Doc = objIE.document 36 Doc.getElementsByName("ID")(0).Value = "*******" 37 Doc.getElementsByName("Pass")(0).Value = "******" 38 Doc.getElementsByName("Login")(0).Click 39 Call IEwait(objIE) 40 Doc.getElementById("Site").Click 41 Call IEwait(objIE) 42 Doc.getElementById("Situation").Click 43 '指定のページに到着 44 45 'プルダウンから全てのOPTIONを書き出す 46 '一度↓を挟まないとh=125でForを抜けてしまうーーーーーーーーーーーーーーー① 47 For k = 0 To Doc.all.Length - 1 48 Next k 49 50 51 i = 1 52 For k = 0 To Doc.all.Length - 1 53 If Doc.all(k).tagName = "OPTION" Then 'ここでエラー70が出るーーーーーーーーー② 54 Cells(i, 4) = Doc.all(k).innerText 55 i = i + 1 56 End If 57 Next k 58 59 '書き出したものから対象者のindexを調べる 60 i = 1 61 For l = 0 To RE 62 For i = 1 To Cells(Rows.Count, 4).End(xlUp).Row - 1 63 If Cells(i, 4) = lst(l) Then 64 num(l) = i 65 Exit For 66 End If 67 Next i 68 Next l 69 70 71 Application.DisplayAlerts = False 72 Worksheets("result").Delete 73 Application.DisplayAlerts = True 74 Worksheets.Add after:=Worksheets("list") 75 ActiveSheet.Name = "result" 76 77 '対象者の表をresultのシートに書き出していく 78 i = 1 79 For l = 0 To RE 80 Doc.getElementById("Manager").selectedIndex = num(l) 81 Cells(i, 1) = lst(l) 82 i = i + 1 83 '一度↓を挟まないとh=125でForを抜けてしまうーーーーーーーーーーーーー① 84 For k = 0 To Doc.all.Length - 1 85 Next k 86 87 '表の取得、書き出し 88 For k = 0 To Doc.all.Length - 1 89 If Doc.all(k).tagName = "TD" Then 90 Cells(i, 1) = Doc.all(k).innerText 91 k = k - 1 92 For j = 2 To 7 93 Cells(i, j) = Doc.all(k + j).innerText 94 Next j 95 i = i + 1 96 k = k + j + 1 97 End If 98 Next k 99 Next l 100 101 102End Function
ExcelのVBAでしょうから、Excelのタグを入れましょう。
回答1件
あなたの回答
tips
プレビュー