IAccessible を得るには、 方法1) 座標が分かっている場合は、AccessibleObjectFromPoint API 方法2) hWnd が分かっている場合は、AccessibleObjectFromWindow API 方法3) hWnd が無い場合は、ウィンドウを持つ祖先オブジェクトから子孫要素を辿る といった方法があります。 昔は、OLEACC.DLL を参照設定する必要がありましたが、 最近の Excel なら、標準で Dim objAcc As Office.IAccessible と書けるので、そっちでも良いかも。 'Call AccessibleObjectFromPoint32(x, y, objAcc, vnt) 'Call AccessibleObjectFromPoint64(y * &H100000000^ Or x, objAcc, vnt) Call AccessibleObjectFromWindow(ByVal hWnd, OBJID_NATIVEOM, guidIDispatch, objAcc) Debug.Print objAcc.accName
※AccessibleObjectFromPoint の第一引数は POINT 構造体を「値渡し」する仕様なので、 32bit VBA から呼ぶ場合は、第一引数を X 引数と Y 引数に分割したり、 64bit VBA から呼ぶ場合は、X と Y を単一の 64bit 整数型にまとめてから値渡しするなどの工夫が必要。
あるいは、MSAA の後継たる UI Automation 経由でも得られるかと。 参照設定で UIAutomationClient を加えておいたうえで、 UIAutomationClient クラスの ElementFromHandle メソッドか ElementFromPoint メソッドを使うと、 操作対象の IUIAutomationElement を得られるので、そこから Dim objUIAuto As UIAutomationClient.CUIAutomation Set objUIAuto = New UIAutomationClient.CUIAutomation Dim objIUIAutomationElement As UIAutomationClient.IUIAutomationElement Set objIUIAutomationElement = objUIAuto.ElementFromHandle(ByVal hWnd) 'もしくは ElementFromPoint Dim objlegacy As UIAutomationClient.IUIAutomationLegacyIAccessiblePattern Set objlegacy = objIUIAutomationElement.GetCurrentPattern(UIA_LegacyIAccessiblePatternId) Debug.Print legacy.CurrentName といった感じかと。