我对EXcel VBA有所了解,并且是UI自动化的新手。我正在尝试使用Excel VBA在客户端环境内进行UI自动化。我有参考UIAutomationCore.dll。当我尝试单击应用程序上的按钮时,出现“运行时错误-2147467256(80004005)自动化错误未指定的错误”。
下面是我的代码。在最后一行,当我尝试调用该功能时,出现错误。
我正在使用Window 7 32位计算机和32位版本的Excel2010。
Dim oUIA As UIAutomationClient.CUIAutomation
Dim deskEle As UIAutomationClient.IUIAutomationElement
Dim ele As UIAutomationClient.IUIAutomationElement
Dim invokePattern As UIAutomationClient.IUIAutomationInvokePattern
Dim legacyPattern As UIAutomationClient.IUIAutomationLegacyIAccessiblePattern
Dim cnd As UIAutomationClient.IUIAutomationCondition
Dim walker As UIAutomationClient.IUIAutomationTreeWalker
Set oUIA = New UIAutomationClient.CUIAutomation
Set walker = oUIA.RawViewWalker
Set deskEle = oUIA.GetRootElement
Set ele = walker.GetFirstChildElement(deskEle)
Do While Not ele Is Nothing
If InStr(ele.CurrentName, "Title of the window") Then
Set myWindow = ele
Exit Do
End If
Set ele = walker.GetNextSiblingElement(ele)
Loop
Set cnd = oUIA.CreatePropertyCondition(UIA_NamePropertyId, "Go")
Set ele = myWindow.FindFirst(TreeScope_Subtree, cnd)
Set legacyPattern = ele.GetCurrentPattern(UIA_LegacyIAccessiblePatternId)
legacyPattern.DoDefaultAction
我也尝试过使用UIA_InvokePatternId。我仍然遇到相同的错误。
Set invokePattern = ele.GetCurrentPattern(UIA_InvokePatternId)
invokePattern.Invoke
实际上是在单击该按钮。但是由于最后一行的错误,执行没有向前推进。我也尝试过如下。
On Error Resume Next
invokePattern.Invoke
On Error GoTo 0
然后,invokePattern.Invoke之后的下一行将被执行,但问题是,单击该按钮后,另一个小窗口打开。我无法使用UIAutomation读取第二个窗口上的元素。但是,当我手动单击按钮时,我可以读取和访问第二个窗口中的元素。我希望能够单击按钮以编程方式访问第二个窗口的元素。我在任何地方都找不到解决方案。有人可以帮我吗?预先谢谢你。