Как настроить элемент Specifi c в проводнике Inte rnet с помощью Access VBA - PullRequest
1 голос
/ 14 января 2020

Прежде всего, пожалуйста, прости меня за любые ошибки в публикации - это мой первый раз (хотя я частый посетитель!

Я работаю над программой для повышения производительности в моей рабочей группе. Я пытаюсь связать базу данных Access с внутренним веб-приложением (на основе Pega), которое очень сложно.К сожалению, мои знания в области кодирования очень просты c, и у меня нет доступного финансирования или пропускной способности для получения формальной помощи. Хотя я хотел бы использовать надстройки, я не могу, поскольку моя компания не допустит этого (я просил, умолял, просил и т. Д. c).

Это как выглядит страница программы. Сначала мне нужно щелкнуть вкладку «Диспетчер работ» (WMT), заблокированную в ЗЕЛЕНОМ, а затем нажать кнопку «Получить следующий» (СПП), заблокированную в КРАСНОМ.

  1. Привязать правильный IE оконный сеанс
  2. Нажмите на WMT
  3. Нажмите на СПП

Я смог использовать Доступ для привязки правильное окно и вкладка IE (спасибо человеку, который предоставил для этого базовый c код!), но еще не смог расшифровать, как настроить таргетинг на нужный элемент на странице. Насколько мне известно, структура именования - это слишком много.

Этот является снимком экрана HTML для WMT (он не будет копировать его, по крайней мере, разборчиво, даже после очистки). Я хотел бы иметь возможность использовать идентификатор для указанного элемента c, однако, он динамический c и меняется с каждым взаимодействием, поэтому я пытался нацеливаться на фрагменты stati c, выделенные в зеленом.

Я не очень много работал со вторым фрагментом, однако, Это - скриншот для этого, с кнопкой, выделенной желтым цветом, если кто-то тоже хочет помочь.

Спасибо!

КОД ДЛЯ ОКНА BIND (работает до сих пор!)

Sub C360WindowFind()
marker = 0
Set objShell = CreateObject("Shell.Application")
IE_count = objShell.Windows.Count
For x = 0 To (IE_count - 1)
    On Error Resume Next
    my_url = objShell.Windows(x).document.Location
    my_title = objShell.Windows(x).document.Title

    If my_title Like "Coverage User" & "*" Then
        Set C360Window = objShell.Windows(x)
        marker = 1
        Exit For
    Else
    End If
Next

If marker = 0 Then
MsgBox ("C360 window is not found. Please ensure C360 is open in Internet Explorer and try again")
Else
    'DO THE OTHER THINGS
End If
End Sub

КОД Я ПОПЫТАЛСЯ НА ЦЕЛЕВОЙ ПРАВИЛЬНОЙ ТАБЛИЦЕЙ (Добавьте вместо «Делать другие вещи» в предыдущем наборе кодов)

FIRST TRY (выполняет какие-то безумные вещи, которые заканчиваются тем, что программа выходит из системы)

FindWorkManager1()
Dim C360doc As HTMLDocument
Dim Element
Dim ULTabName As String
Dim LIElement As String
Dim WMT_HREF As String
ULTabName = "yui-nav tab-ul tab-ul-t tab-ul-t-ns subTabsList"
ULElement = "getElementsByClassName"
LIElement = "getElementbyID"
WMT_HREF = "getElementsByTagName"

Set C360doc = C360Window.document
With C360doc.all
If element = ULElement("ULTabName").LIElement("Work Manager").innerText.WMT_HREF("a")(0) Then
element.Click
Else
MsgBox ("Please ensure Work Manager is open, then try again")
End If
End With
End Sub

SECOND TRY: Добирается до линий со звездами и выходит (попробовал пару вариантов этого с теми же результатами)

FindWorkManager2()
Dim C360doc As HTMLDocument
Set C360doc = C360Window.document
    TabTagCounter = 0
    TabItemCounter = 0
    With C360doc.all
        Set Header = C360doc.getElementsByClassName("yui-nav tab-ul tab-ul-t tab-ul-t-ns subTabsList")
'Find the correct TabTag within Header
        For Each TabTag In Header
            If TabTag.tagName Like "UL" Then
            TabTagCounter = 1
'If we've identified the correct TabTag, then look at the TabItem
'*************Not currently working beyond this point :(
        If TabTagCounter = 1 Then
            For Each TabItem In TabTag
                If TabItem.innerText Like "*Work Manager*" Then
                TabItemCounter = 1
                End If
        MsgBox ("try again")
        Next
            Else
            End If
End If
Next
End With
End Sub

1 Ответ

0 голосов
/ 16 января 2020

Я думаю, вы должны попытаться нажать на тег <a>, так как это ссылка, ведущая к #Tab2. Если класс yui-nav tab-ul tab-ul-t tab-ul-t-ns subTabsList является единственным, вы можете сначала найти ul с этим именем класса, а затем li и a с именем тега.

Поскольку реальная ссылка недоступна поэтому я создаю тестовую страницу, как показано ниже:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
</head>
<body>
    <div class="tStrCntr">
        <ul class="yui-nav tab-ul tab-ul-t tab-ul-t-ns subTabsList">
            <li tabindex="-1"title="Work Manager"></li>
            <li tabindex="0" title="Home" id="Tab2">
                <a tabindex="-1" id="TABANCHOR" href="https://www.google.com">
                    <span style="display: inline-block">
                        <label>Work Manager</label>
                    </span>
                </a>
            </li>
        </ul>
    </div>
</body>
</html>

И код VB для нажатия Work Manager на тестовой странице, как показано ниже, вы можете провести тест:

Обновленная версия:

Sub LOADIE()
    Dim link As Object
    Set ieA = CreateObject("InternetExplorer.Application")
    ieA.Visible = True
    ieA.navigate "http://the test web page"
    Do Until ieA.readyState = 4
       DoEvents
    Loop

    Set doc = ieA.Document
    Set ElementCol = doc.getElementsByClassName("yui-nav tab-ul tab-ul-t tab-ul-t-ns subTabsList")(0).getElementsByTagName("li")
    For Each link In ElementCol
    If link.getAttribute("title") = "Work Manager" Then
        link.getElementsByTagName("a").Item(0).Click
    End If
    Next link

End Sub
...