运行时错误;自动化错误;使用UIAutomation的VBA中的未指定错误

时间:2018-12-10 17:38:57

标签: excel vba excel-vba ui-automation

它以前一直在工作,但是当我在sub的第12行上设置oElements时,我一直收到错误代码“自动化错误;未指定的错误”。有什么想法吗?

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自动化
  • Microsoft ActiveX数据对象2.0库
  • Microsoft HTML对象库
  • Microsoft Internet控件
  • 用于应用程序可扩展性5.3的Microsoft Visual Basic
  • UIAutomationClient

1 个答案:

答案 0 :(得分:0)

不要无意使用RootElement的treescope_descendant! 我不知道为什么,但是在遍历根的后代时,FindAll函数通常会出错。

让我们假设您正在寻找“另存为” 对话框(然后是其中的文件路径文本字段)。

浏览rootelement.children,然后查找“另存为”窗口的所有者。因此,如果所有者是Internet Explorer浏览器,则检查rootelement.children是否具有UIA_Nameproperty,例如“ * Internet Explorer”。然后在其后代中搜索“另存为”框。

或者,设置oElements时尝试添加其他条件,该条件使用windowpattern获取:

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

您已经在第一个if块中再次检查名称属性