そのまんまで、dynamicなMenuということ。
dynamicMenu要素には、getContent属性が必須で、このコールバックでメニュー表示に必要なRibbonXmlを取得する。子要素はmenuと同じで、
<menu xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<!--menu子要素-->
</menu>
のXmlを用意してあげないとならない。
invalidateContentOnDrop属性をtrueにすることでメニュー展開時にコールバックを要求してくる。
どんな方法でもいいからRibbonXmlを返せばいい。
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui"> <ribbon> <tabs> <tab id="tab01" label="タブ01"> <group id="g01" label="グループ01"> <dynamicMenu id="dm01" getContent="getContent" size="large" imageMso="CreateForm" label="ダイナミックメニュー" invalidateContentOnDrop="true" /> </group> </tab> </tabs> </ribbon> </customUI>
Option Compare Database
Option Explicit
Sub getContent(ctr As IRibbonControl, rtnXml)
rtnXml = CreateContents
End Sub
Sub onAction(ctr As IRibbonControl)
MsgBox ctr.id & vbTab & ctr.Tag
End Sub
Private Function CreateContents()
Dim xdoc As New DOMDocument
Dim xelem(1) As IXMLDOMElement
Dim objCount As Integer, i As Integer
Dim dbs As Database, accdoc As Document
Set dbs = CurrentDb
Set xelem(0) = xdoc.createElement("menu")
xelem(0).setAttribute "xmlns", "http://schemas.microsoft.com/office/2009/07/customui"
xelem(0).setAttribute "itemSize", "large"
xdoc.appendChild xelem(0)
objCount = dbs.Containers("Forms").Documents.Count
If objCount > 0 Then
Set xelem(1) = xdoc.createElement("menuSeparator")
xelem(1).setAttribute "id", "sep01"
xelem(1).setAttribute "title", "フォーム"
xelem(0).appendChild xelem(1)
For i = 0 To objCount - 1
Set accdoc = dbs.Containers("Forms").Documents(i)
Set xelem(1) = xdoc.createElement("button")
With xelem(1)
.setAttribute "id", "form" & Format(i, "00")
.setAttribute "label", accdoc.Name
.setAttribute "tag", accdoc.Name
.setAttribute "imageMso", "CreateForm"
.setAttribute "onAction", "onAction"
.setAttribute "description", docDescription(accdoc)
End With
xelem(0).appendChild xelem(1)
Next
End If
CreateContents = xdoc.XML
' Debug.Print xdoc.XML
Set xdoc = Nothing
Set dbs = Nothing
End Function
Private Function docDescription(doc As Document) As String
On Error GoTo ErrHnd
docDescription = Nz(doc.Properties("Description"), " ")
Exit Function
ErrHnd:
docDescription = " "
End Function
<menu xmlns="http://schemas.microsoft.com/office/2009/07/customui" itemSize="large"><menuSeparator id="sep01" title="フォーム"/><button id="form00" label="フォーム1" tag="フォーム1" imageMso="CreateForm" onAction="onAction" description="DescriptionDescription"/>
<button id="form01" label="フォーム2" tag="フォーム2" imageMso="CreateForm" onAction="onAction" description=" "/>
<button id="form02" label="フォーム3" tag="フォーム3" imageMso="CreateForm" onAction="onAction" description="DescriptionDescription"/>
<button id="form03" label="フォーム4" tag="フォーム4" imageMso="CreateForm" onAction="onAction" description="DescriptionDescription"/>
<button id="form04" label="フォーム5" tag="フォーム5" imageMso="CreateForm" onAction="onAction" description=" "/>
</menu>
0 件のコメント:
コメントを投稿