它以前一直在工作,但是当我在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
我的参考是
答案 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块中再次检查名称属性