Public Sub listDevNet() Dim cel As Range Dim ie As InternetExplorer Dim id As String Dim searchBox As Object Dim fromNID As String Dim path As String Set cel = ActiveCell id = getID(cel) If id <> "" Then Call searcID(id) Else Exit Sub End If fromNID = id Set ie = getProcenter() path = getDevNetPath(ie) Call listDevNetContinueFirst(fromNID, path) End If End Sub Public Function getProcenter() As InternetExplorer Dim objShell As Object Dim objWin As Object Dim loginBtn As Object Set getProcenter = Nothing RETRY_GET_PROCETNER: Set objShell = CreateObject("Shell.Application") For Each objWin In objShell.Windows DoEvents If objWin.name = "Internet Explorer" Then If "PROCENTER" = objWin.LocationName Then Set getProcenter = objWin Exit For End If End If Next If getProcetner Is Nothing Then Set objShell = CreateObject("Shell.Application") For Each objWin In objShell.Windows DoEvents If objWin.Name = "Internet Explorer"Then If "BizMart" = objWin.LocationName Then Call getLinkByInnerText(objWin,"PROCENTER トップ”.Click Call waitIE(objWin) Set getProcenter = getIEByTitle("PORCENTER") Exit For End If End If Next End If If getProcenter Is Nothing Then Set getProcenter = openDevNet() End If If getProcenter Is Nothing Then GoTo RETRY_GET_PROCENTER End If If Not getProcenter.document.all("Password") Is Nothing Then getProcenter.document.all("Password").value = "your password" Set loginBtn = getInputByAlt(getProcenter, "ログイン") Call loginBtn.Click Call waitIE(getProcenter) End If End Function Public Sub listFiles(cel As Range) Dim link As Object Dim ie As InternetExplorer Dim iconName As String Dim fso As New FileSystemObject Dim i As Integer Dim tdFilename As Object Dim tdClassName As Object Dim tdUpdateTime As Object Dim tdName As Object Dim tdSeq As Object Application.ScreenUpdating = False Set ie = getProcenter() Call waitIE(ie) For Each link In ie.document.frames("main").document.links DoEvents If link.getElementsByTagName("IMG").Length > 0 Then iconName = fso.getFilename(link.getElementsByTagName("IMG")(0).src) If link.innerText = "ファイル登録" Then GoTo NEXT_LINK End If If iconName = "file_node.gif" Then name = Trim(link.innerText) cel.Offset(0, 1).value = name cel.Offset(0, 2).NumberFormatLocal = "@" cel.Offset(0, 2).value = getQueryString(link.href, "Nid") 'Filename Set tdFilename = link.parentElement For i = 1 To 7 Set tdFilename = tdFilename.nextSibling Next cel.Offset(0, 3).value = tdFilename.innerText 'Update time Set tdUpdateTime = link.parentElement For i = 1 To 4 Set tdUpdateTime = tdUpdateTime.nextSibling Next cel.Offset(0, 4).NumberFormatLocal = "@" cel.Offset(0, 4).value = tdUpdateTime.innerText 'Class name Set tdClassName = link.parentElement For i = 1 To 9 Set tdClassName = tdClassName.nextSibling Next cel.Offset(0, 5).NumberFormatLocal = "@" cel.Offset(0, 5).value = tdClassName.innerText 'Seq Set tdUpdateTime = link.parentElement For i = 1 To 4 Set tdUpdateTime = tdUpdateTime.nextSibling Next cel.Offset(0, 4).NumberFormatLocal = "@" cel.Offset(0, 4).value = tdUpdateTime.innerText Private Function gotoPath(path As String) As Object Dim ie As InternetExplorer Dim searchBox As Object Dim searchBtn As Objejct Dim leafItem As Object Dim nextSibling As Object Dim pathItem As Object Dim startIndex As Integer Dim i As Integer Dim pnides As String Dim nid As String Dim href As String Dim fso As New FileSystemObject nid = "" Set gotoPath = Nothing Set ie = getProcenter() StartIndex = 0 For Each pathItem In Split(path, "/") DoEvents pathItem = Replace(pathItem, "%2f", "/") For i = startIndex To ie.document.frames("sidetree").document.links.Length - 1 DoEvents Set leatItem = ie.document.frames("sidetree").document.links(i) pnides = getQueryString(leafItem.href, "Pnides") If Trm(leafItem.innerText) = pathItem And right(pnides, Len(nid)) = nid Then startIndex = i + 1 Set gotoPath = leafItem nid = getQueryString(leafItem.href, "Nid") href = gotoPath.href If gotoPath.PreviousSibling.Children.Length > 0 Then If fso.getFilename(gotoPath.PrevisouSibling.Children(0).src) = "html_tree_close2.gif" _ Or fso.getFilename(gotoPath.PreviousSibling.Children(0).src) = "html_tree_close3.gif" Then Call gotoPath.PreviousSibling.Click Call waitIE(ie) End If End If Exit For End If Next Next Set gotoPath = findLinkByHref(href) Call gotoPath.Click Call waitIE(ie) Set gotoPath = findLinkByHref(href) End Function Public Function getID(cel As Range) As String Dim reg As New RegExp Dim matches As Object getID = "" On Error GoTo EXIT_SUB reg.Pattern = "\d{10,10}" Set matches = reg.Execute(cel.value) getID = matches.Item(0).value EXIT_SUB: End Function Public Sub listDevNetContinueFirst(fromNID As String, path As String, Optional idUpdate As String) Dim cel As Range Dim nid As String Dim nextSibling As Object Dim fso As New FileSystemObject Dim iconNam AsString Dim href As String Dim pnides As String Dim br As Object Dim col As Integer Dim ie As InternetExplorer Dim searchBox As Object Dim searchBtn As Object Dim retryCnt As Integer Dim leafItem As Object Dim pathItem As Object Dim ret As Boolean Set cel = ActiveCell Call searchID(fromID) Set ie = getProcenter() If Instr(ie.document.frames("main").document.body.innerText, "検索に失敗しました") > 0 Then MsgBox "検索に失敗しました", vbOKOnly, "DevNetList" Exit Sub End If Set treeItem = gotoPath(path) If Instr(ie.document.frames("side tree").document.body.innerText, "HTTP エラー") > 0 Then Call refreshIE End If CONTINUE_LIST: nid = getQueryString(treeItem.href, "Nid") Set br = treeItem.PreviousSibling col = 0 Do While Not br Is Nothing DoEvents If br.tagName = "BR" Then Exit Do End If col = col + 1 Set br = br.PreviousSibling Loop col = col - 2 cel.Offset(0, col).value = treeItem.innerText cel.Offset(0, 1 + col).NumberFormatLocal = "@" cel.Offset(0, 1 + col).value = nid Set cel = cel.Offset(1, 0) If Application.WorksheetFunction.CountA(Rows(cel.row)) > 0 Then cel.EntireRow.Insert Set cel = cel.Offset(-1, 0) End If Call listFiles(cel) Set nextSibling = treeItem.nextSibling Do While Not nextSibling Is Nothing DoEvents If TypeName(nextSibling.getAttribute("href")) <> "Null" Then href = nextSibling.getAttribute("href") pnides = getQueryString(nextSibling.href, "Pnides") If pnides <> "" And InStr(pnides, fromNID) < 1 Then Exit Do End If If pnides <> "" And idUpdate <> "" Then If InStr(pnides, idUpdate) < 1 Then Exit Do End If End If End If If nextSibling.getElementsByTagName("IMG").Length > 0 Then iconName = fso.getFilename(nextSibling.getElementsByTagName("IMG")(0).src) If iconName = "html_tree_close3.gif" Then href = nextSibling.nextSibling.href Call nextSibling.nextSibling.Click Call Sleep(500) retryCnt = 0 RETRY_IT2: Set nextSibling = findLinkByHref(href) path = getDevNetPath(ie) If nextSibling Is Nothing Then retryCnt = retryCnt + 1 If retryCnt > 15 Then Call refreshIE End If Sleep 500 GoTo RETYR_IT2 Else Set br = nextSibling.PreviousSibling col = 0 Do While Not br Is Nothing DoEvents If br.tagName = "BR" Then Exit Do End If col = col + 1 Set br = br.PreviousSibling Loop col = col - 2 If Application.WorksheetFuntion.CountIf(cel.Parent.Range("C2:C" & (cel.row - 1)), getQueryString(nextSibling.href, "Nid")) > 0 Then Set nextSibling = nextSibling.nextSilbing GoTo CONTINUE_NEXT End If href = nextSibling.href pnides = getQueryString(hreg, "Pnides") path = getDevNetPath(ie) If pnides <> "" And InStr(pnides, fromNID) < 1 Then Exit Do End If If pnides <> "" And idUpdate <> "" Then If InStr(pnides, idUpdate) < 1 Then Exit Do End If End If 'Application.ScreenUpdating = False cel.Offset(0, col).NumberFormatLocal = "@" cel.Offset(0, col).value = nextSibling.innerText cel.Offset(0, 1 + col).NumberFormatLocal = "@" cel.Offset(0, 1 + col).value = getQueryString(href, "Nid") cel.Parent.Cells(cel.row, "A").value = path Set cel = cel.Offset(1, 0( Call listFiles(cel) End If GoTo CONTINUE_NEXT End If If nextSibling.taName = "A" And _ (iconName = "folder_node_link.gif" Or iconName = "folder_node.gif" Then Set br = nextSiblingPreviousSibling col = 0 Do While Not br Is Nothing DoEvents If br.tagName = "BR" Then Exit Do End If col = col + 1 Set br = br.PreviousSibling Loop col = col - 2 If Application.WorksheetFunction.CountIf(cel.Parent.Range("C2:C" & (col.row - 1)), getQueryString(nextSibling.href, "Nid")) > 1 Then Set nextSibling = nextSibling.nextSibling GoTo CONTINUE_NEXT End If href = nextSibling.href pnides = getQueryString(href, "Pnides") Call nextSibling.Click Call Sleep(1000) Set nextSibling = findLindByHref(href) path = getDevNetPath(ie) Application.ScreenUpdating = False cel.EntireRow.Insert Set cel = cel.Offset(-1, 0) cel.Offset(0, col).NumberFormatLoal = "@" cel.Offset(0, col).value = nextSibling.innerText cel.Offset(0, 1 + col).NumberFormatLocal = "@" cel.Offset(0, 1 + col).value = getQeuryString(nextSibling.href, "Nid") path = getDevNetPath(ie) Cel.Parent.Cells(cel.row, "A").value = path Set cel = cel.Offset(1, 0) If Application.WorksheetFunction.CountA(Rows(cel.row)) > 0 Then Cel.EntireRow.Insert Set cel = cel.Offset(-1, 0) End If Application.ScreenUpdating = True Call listFiles(cel) End If End If CONTINUE_NEXT: If nextSibling Is Nothing Then Call expandPath(fromNID, path) Set nextSibling = gotoPath(path) End If Set ie = getProcenter() If InStr(ie.document.frames("sidetree").document.body.innerText, "HTTP エラー") > 0 Then Call refreshIE End If If nextSibling Is Nothing Then retryCnt = retryCnt + 1 If retryCnt > 10 Then Call refreshIE End If Sleep 500 GoTo CONTINUE_NEXT End If On Error Resume Next Set nextSibling = nextSibling.nextSibling If nextSilbing Is Nothing Then Exit Do nextSibling.Style.Border = "2px solid red" If Err.Number <> 0 Then Set nextSibling = Nothing GoTo CONTINUE_NEXT End If retryCnt = 0 Loop cel.Select Application.ScreenUpdating = True End Sub Private Sub refreshIE() Dim ie As InternetExploer Dim ret As Boolean REFRESH_IE: Set ie = getProcenter() Call BringWindowToTop(ie.hWnd) Sleep 500 Ie.Refresh2 Ret = clickDialogButton("Windows Internet Explorer", "再試行(R)") End Sub Public Sub doExpandPath() Dim frmNID As String Dim path As String Dim ie As InternetExplorer fromNID = getID(Cells(1, 1)) path = ActiveCell.value Call expandPath(fromNID, path) Set ie = getProcenter() Call BringWindowToTop(ie.hWnd) End Sub Private Sub expandPath(fromNID As String, path As String) Dim ie As InternetExplorer Dim searchBox As Object Dim searchBtn As Object Dim leftItem As Object Dim nextSibling As Object Dim pathItem As Object Dim startIndex As long Dim I As long Dim imgs As Object Dim fso As New FileSystemObject Dim imageName As String Dim pnids As String Dim nid As String nid = "" Call seachID(fromNID) Set ie = getProcenter() startIndex = 0 For Each pathItem in Split(path, "/") DoEvents pathItem = Replace(pathItem, "%2f", "/") DO_NEXT_IMG: Set imgs = ie.document.frames("sidetree").document.images For i = startIndex To imgs.Length - 1 DoEvents Set leafItem = imgs(i) imageName = fso.getFilename(leafItem.src) If imageName = "html_tree_open1.gif" Or imageName = "html_tree_open2.gif" Or imageName = "html_tree_open3.gif" Then If Trim(leafItem.ParentNode.nextSibling.innerText) = pathItem Then Call leafItem.ParentNode.nextSibling.Click Sleep 1000 Exit For End If If Instr(path &"/", "/" & Trim(leafItem.ParentNode.nextSibling.innerText) & "/") > 0 Then Else Call leafItem.Click Sleep 1000 Set imgs = ie.document.frames("sidetree").document.images GoTo DO_NEXT_IMG End If End If If imageName = "html_tree_close1.gif" Or imageName = "html_tree_close2.gif" Or imageName = "html_tree_close3.gif" Then pnides = getQueryString(leafItem.href, "Pnides") If Trim(leafItem.ParentNode.nextSibling.innerText) = pathItem And right(pnides, Len(nid)) = nid Then nid = getQueryString(leafItem.href, "Nid") Call leafImte.ParentNode.nexSiblikng.Click Sleep 1000 Exit For End If End If If imageName = "folder_node.gif" Then pnides = getQueryString(leafItem.href, "Pnides") If Trim(leafItem.ParentNode.innterText) = pathItem And right(pnides, Len(nid)) = nid Then nid = getQueryString(leafItem.href, "Nid") Call leatItem.ParentNode.Click Sleep 1000 Exit For End If End If NEXT_IMG: Next Next End Sub Public Sub searchID(id As String) Dim ie As InternetExplorer Dim searchBox As Object Dim searchBtn As Object Dim loginBtn As Object RETRY_SEARCH: Set ie = getProcenter() Set searchBox = getInputByName(ie, "@i_ID=") searchBox.value = id Set searchBtn = getIputByValue(ie, "検索") Call searchBtn.Click Call waitIE(ie) If ie.document.frames.Length = 0 Then ie.document.all("Password").value = "your password" Set loginBtn = getInputByAlt(ie, "ログイン") Call loginBtn.Click Call waitIE(ie) GoTo RETRY_SEARCH End If End Sub Public Function getDevNetPath(ie As InternetExplorer) As String Dim link As Object Dim font As Object Dim firstRowInMain As Object Set firstRowInMain = ie.document.frames("main").document.getElementsByTagName("TR")(0) getDevNetPath = "" For each link In firstRowInMain.getElementsByTagName("A") getDevNetPath = getDevNetPath & Trim(link.innerText) & "/" Next For Each font In firstRowInMain.getElementsByTagName("FONT") If font.getAttribute("color") = "#000080" Then 'navy GetDevNetPath = getDevNetPath & Replace(Trim(font.innerText), "/", "%2f") Exit For End If Next End Function Public Function getImageByAlt(ie As InternetExplorer, alt As String) As Object Dim img As Object Set getImageByAlt = Nothing For Each img In ie.document.images If img.alt = alt Then Set getImageByAlt = img Exit Funciton End If Next End Function Public Function clickDialogButton(dlgTitle As String, caption As String) As Boolean Dim elmDialog As UIAutoamtionClient.IUIAutomaitonElement Dim j As Integer Dim cndButtonName As UIAutomationClient.IUIAutomationCondition Dim elmButton As UIAutomationClient.IUIAutomationElement Dim ptnButton As UIAutomationClient.IUIAutomationLegacyIAccssiblePattern Dim h As Long Dim uiAuto As New UIAutomationClient.CUIAutomation clickDialogButton = False h = FindWindow(vbNullString, dlgTitle) If h = 0 Then Exit Function Set elmDialog = uiAuto.ElementFromHandle(ByVal h) Set cndButtonName = uiAuto.CreatePropertyCondition(UIA_NamePropertyId, caption) Set elmButton = elmDialog.FindFirst(TreeScope_Subtree, cndButtonName) Set ptnButton = elmButton.GetCurrentPattern(UIA_LegacyIAccessiblePatternId) ptnButton.DoDefaultAction clickDialogButton = True End Function |
投稿 >