Ошибка выполнения;Ошибка автоматизации;Неопределенная ошибка в VBA с использованием UIAutomation - PullRequest
0 голосов
/ 10 декабря 2018

Раньше это работало, но теперь я получаю код ошибки «Ошибка автоматизации; Ошибка не определена», когда я устанавливаю элементы в строке 12 подпрограммы.Есть мысли?

Sub SavePath(ByVal strWindowID As String, ByVal strObjectName As String, ByVal strAutomationId As String, ByVal strLocalizeType As String, ByVal strValue As String)

Dim intElementCounter As Integer
Dim strTreeItem1 As String
Dim strTreeitem2 As String
Dim strTreeitem3 As String

strThiswbFileName = ActiveWorkbook.Name
strThiswbCaption = Application.Caption

Set oTW = oAutomation.ControlViewWalker
Set oCondition = oAutomation.CreatePropertyCondition(UIAutomationClient.UIA_NamePropertyId, strObjectName)
Set oElements = oAutomation.GetRootElement.FindAll(TreeScope_Descendants, oCondition)

For intElementCounter = 0 To oElements.length - 1
    If oElements.GetElement(intElementCounter).CurrentName = strObjectName Then
        If oElements.GetElement(intElementCounter).CurrentAutomationId = strAutomationId Then
            If oElements.GetElement(intElementCounter).CurrentLocalizedControlType = strLocalizeType Then
                Set oPatternValue = oElements.GetElement(intElementCounter).GetCurrentPattern(UIAutomationClient.UIA_ValuePatternId)
                oPatternValue.SetValue strValue
                Exit Sub
            End If
        End If
    End If
Next
End Sub

Мои ссылки

  • Visual Basic для приложений
  • Библиотека объектов Microsoft Excel 14.0
  • OLE Automation
  • Библиотека объектов данных Microsoft ActiveX 2.0
  • Библиотека объектов Microsoft HTML
  • Элементы управления Microsoft Internet
  • Microsoft Visual Basic для приложений Расширяемость 5,3
  • UIAutomationClient

1 Ответ

0 голосов
/ 13 декабря 2018

Не используйте treescope_descendants из RootElement без осторожности!Я не знаю почему, но в функции FindAll может быть ошибка, часто при прохождении потомков корня.

Предположим, вы ищете диалоговое окно «Сохранить как» (а затем текстовое поле filepath внутри).

Перебирайте rootelement.children и ищитевладелец окна «Сохранить как».Так что, если владельцем является браузер Internet Explorer, проверьте rootelement.children для пользователей с UIA_Nameproperty, таких как * Internet Explorer.Затем найдите их потомков для поля SaveAs.

В качестве альтернативы, попробуйте добавить другое условие при установке oElements, которое получает те с помощью windowpattern:

Set oCondition = oAutomation.CreatePropertyCondition(UIAutomationClient.UIA_IsWindowPatternAvailablePropertyId, True)

Вы уже снова проверяете свойство имени в своем первом if-блоке

...