Option Explicit
#If VBA7 Then
Declare PtrSafe Function AccessibleChildren Lib "oleacc" (ByVal paccContainer As Office.IAccessible, ByVal iChildStart As Long, ByVal cChildren As Long, ByRef rgvarChildren As Any, ByRef pcObtained As Long) As Long
#Else
Declare Function AccessibleChildren Lib "oleacc" (ByVal paccContainer As Office.IAccessible, ByVal iChildStart As Long, ByVal cChildren As Long, ByRef rgvarChildren As Any, ByRef pcObtained As Long) As Long
#End If
Const CHILDID_SELF = &H0&
Const NAVDIR_FIRSTCHILD = &H7&
Const NAVDIR_LASTCHILD = &H8
Const NAVDIR_DOWN = &H2
Function IsOfficeClipboardEmpty() As Boolean
Dim vAcc As Variant, bClipbord As Boolean, i As Long
With Application.CommandBars("Office Clipboard")
bClipbord = .Visible
.Visible = True
DoEvents
Set vAcc = Application.CommandBars("Office Clipboard")
For i = 1 To 5
AccessibleChildren vAcc, Choose(i, 0, 3, 0, 3, 4), 1, vAcc, 1
Next
.Visible = bClipbord
End With
IsOfficeClipboardEmpty = Not CBool(vAcc.accState(vAcc.accNavigate(NAVDIR_FIRSTCHILD, CHILDID_SELF)))
End Function
Function OfficeClipboardElementsCount() As Long
Dim vAcc As Variant, i As Long, lLastChildIndex As Long, lFirstChildIndex As Long, bClipbord As Boolean
With Application.CommandBars("Office Clipboard")
bClipbord = .Visible
.Visible = True
DoEvents
Set vAcc = Application.CommandBars("Office Clipboard")
For i = 1 To 5
AccessibleChildren vAcc, Choose(i, 0, 3, 0, 3, 4), 1, vAcc, 1
Next
.Visible = bClipbord
End With
lFirstChildIndex = vAcc.accState(vAcc.accNavigate(NAVDIR_FIRSTCHILD, CHILDID_SELF))
lLastChildIndex = vAcc.accNavigate(NAVDIR_LASTCHILD, CHILDID_SELF)
OfficeClipboardElementsCount = IIf(lFirstChildIndex = 0, 0, lLastChildIndex)
End Function
Function TextFromOfficeClipboardItem(ByVal ItemIndex As Long) As String
Dim vAcc As Variant, vChildID As Variant, i As Long, bClipbord As Boolean
With Application.CommandBars("Office Clipboard")
bClipbord = .Visible
.Visible = True
DoEvents
Set vAcc = Application.CommandBars("Office Clipboard")
For i = 1 To 5
AccessibleChildren vAcc, Choose(i, 0, 3, 0, 3, 4), 1, vAcc, 1
Next
.Visible = bClipbord
End With
With vAcc
If ItemIndex > 0 Then
If .accState(CLng(1)) <> 0& And .accChildCount >= ItemIndex Then
vChildID = CLng(1)
For i = 1 To ItemIndex - 1
vChildID = .accNavigate(NAVDIR_DOWN, CLng(i))
Next
TextFromOfficeClipboardItem = .accName(vChildID)
End If
End If
End With
End Function