gpt4 book ai didi

vba - 打开文档时,有没有办法在 Word 中显示 customUI 选项卡?

转载 作者:行者123 更新时间:2023-12-04 23:04:39 25 4
gpt4 key购买 nike

我在 Word 中有一个自定义功能区选项卡,它是使用 CustomUI 编辑器创建的,其中包含许多可以正常工作的按钮。我试图找出是否可以在打开 Word 文档时设置此自定义选项卡的焦点。 [或创建新文档时。]

目前,它默认只显示主页选项卡。我找到了打开和关闭自定义选项卡的方法,但不是“设置焦点”。

有任何想法吗?

最佳答案

您可以通过 Microsoft Active Accessibility 实现此目的,我已包含以下网页中的代码,但如果您想了解更多信息,请检查是否退出。 (样本位于页面底部)。

http://www.wordarticles.com/Shorts/RibbonVBA/RibbonVBADemo.php

在一个新模块中,您拥有接受可访问性 API 的代码:

    ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '
' Definitions and Procedures relating to Accessibility, used by the Ribbon VBA '
' Demonstration UserForm. The constants have been lifted from oleacc.h, and are '
' just a subset of those available. '
' '
' Tony Jollans, August 2008. '
' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '

Option Explicit

Public Const CHILDID_SELF As Long = &H0&
Public Const STATE_SYSTEM_UNAVAILABLE As Long = &H1&
Public Const STATE_SYSTEM_INVISIBLE As Long = &H8000&
Public Const STATE_SYSTEM_SELECTED As Long = &H2&

Public Enum RoleNumber
ROLE_SYSTEM_CLIENT = &HA&
ROLE_SYSTEM_PANE = &H10&
ROLE_SYSTEM_GROUPING = &H14&
ROLE_SYSTEM_TOOLBAR = &H16&
ROLE_SYSTEM_PAGETAB = &H25&
ROLE_SYSTEM_PROPERTYPAGE = &H26&
ROLE_SYSTEM_GRAPHIC = &H28&
ROLE_SYSTEM_STATICTEXT = &H29&
ROLE_SYSTEM_TEXT = &H2A&
ROLE_SYSTEM_BUTTONDROPDOWNGRID = &H3A&
ROLE_SYSTEM_PAGETABLIST = &H3C&
End Enum

Private Enum NavigationDirection
NAVDIR_FIRSTCHILD = &H7&
End Enum

Private Declare Function AccessibleChildren Lib "oleacc.dll" _
(ByVal paccContainer As Object, ByVal iChildStart As Long, ByVal cChildren As Long, _
rgvarChildren As Variant, pcObtained As Long) _
As Long

Public Function GetAccessible _
(Element As IAccessible, _
RoleWanted As RoleNumber, _
NameWanted As String, _
Optional GetClient As Boolean) _
As IAccessible

' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '
' This procedure recursively searches the accessibility hierarchy, starting '
' with the element given, for an object matching the given name and role. '
' If requested, the Client object, assumed to be the first child, will be '
' returned instead of its parent. '
' '
' Called by: RibbonForm procedures to get parent objects as required '
' Itself, recursively, to move down the hierarchy '
' Calls: GetChildren to, well, get children. '
' Itself, recursively, to move down the hierarchy '
' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '

Dim ChildrenArray(), Child As IAccessible, ndxChild As Long, ReturnElement As IAccessible

If Element.accRole(CHILDID_SELF) = RoleWanted And Element.accName(CHILDID_SELF) = NameWanted Then

Set ReturnElement = Element

Else ' not found yet
ChildrenArray = GetChildren(Element)

If (Not ChildrenArray) <> True Then
For ndxChild = LBound(ChildrenArray) To UBound(ChildrenArray)
If TypeOf ChildrenArray(ndxChild) Is IAccessible Then

Set Child = ChildrenArray(ndxChild)
Set ReturnElement = GetAccessible(Child, RoleWanted, NameWanted)
If Not ReturnElement Is Nothing Then Exit For

End If ' Child is IAccessible
Next ndxChild
End If ' there are children
End If ' still looking

If GetClient Then
Set ReturnElement = ReturnElement.accNavigate(NAVDIR_FIRSTCHILD, CHILDID_SELF)
End If

Set GetAccessible = ReturnElement

End Function

Private Function GetChildren(Element As IAccessible) As Variant()
' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '
' General purpose subroutine to get an array of children of an IAccessible '
' object. The returned array is Variant because the elements may be either '
' IAccessible objects or simple (Long) elements, and the caller must treat '
' them appropriately. '
' '
' Called by: GetAccessible when searching for an Accessible element '
' Calls: AccessibleChildren API '
' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '
Const FirstChild As Long = 0&
Dim NumChildren As Long, NumReturned As Long, ChildrenArray()

NumChildren = Element.accChildCount

If NumChildren > 0 Then
ReDim ChildrenArray(NumChildren - 1)
AccessibleChildren Element, FirstChild, NumChildren, ChildrenArray(0), NumReturned
End If

GetChildren = ChildrenArray
End Function

然后在你的 ThisTemplateThisDocument模块:
    Option Explicit

Private Sub Document_New()
SwitchTab "MyTab"
End Sub

Private Sub Document_Open()
SwitchTab "MyTab"
End Sub


Private Sub SwitchTab(TabName As String)
Dim RibbonTab As IAccessible

'Get the Ribbon as an accessiblity object and the
Set RibbonTab = GetAccessible(CommandBars("Ribbon"), ROLE_SYSTEM_PAGETAB, TabName)

'If we've found the ribbon then we can loop through the tabs
If Not RibbonTab Is Nothing Then
'If the tab state is valid (not unavailable or invisible)
If ((RibbonTab.accState(CHILDID_SELF) And (STATE_SYSTEM_UNAVAILABLE Or _
STATE_SYSTEM_INVISIBLE)) = 0) Then
'Then we can change to that tab
RibbonTab.accDoDefaultAction CHILDID_SELF
End If
End If

End Sub

关于vba - 打开文档时,有没有办法在 Word 中显示 customUI 选项卡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15113874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com