group要素の属性 autoScale と image
アプリケーションウィンドウを狭くしていったときの挙動みたいなもの。
<group id="ObjectGroup"
label="Create Objects"
autoScale="true"
imageMso="CreateTable">
と、した場合どうなっていくか。
group要素の属性 autoScale と image
アプリケーションウィンドウを狭くしていったときの挙動みたいなもの。
<group id="ObjectGroup"
label="Create Objects"
autoScale="true"
imageMso="CreateTable">
と、した場合どうなっていくか。
【サンプル】
アクセス許可レベルがデザインのグループとそれ以外のグループでリボンを制御する。
単純な制御として、前者は既定のリボンを表示し使用できるようにする。後者はリボンを非表示にする。
Sub setQuickAccessDisplay()
Dim kHnd As LongPtr, lngvalue As Long, lngrtn As Long
lngvalue = 0 '0:非表示 1:表示
Const strSubKey = "Software\Microsoft\Office\14.0\Access\File MRU"
Const strName = "Quick Access Display"
lngrtn = RegOpenKeyEx(HKEY_CURRENT_USER, strSubKey, 0, KEY_SET_VALUE, kHnd)
If lngrtn = ERROR_SUCCESS Then
RegSetValueEx kHnd, strName, 0, REG_DWORD, lngvalue, Len(lngvalue)
End If
RegCloseKey kHnd
End Sub
もしくは、<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui"
onLoad="onLoad">
<ribbon startFromScratch="false">
<tabs>
<tab id="tab01" label="タブ01">
<group id="g01" label="グループ01">
<comboBox id="cb01" label="コンボボックス" getText="getText">
<item id="i01" label="item01" imageMso="Info" />
<item id="i02" label="item02" imageMso="HappyFace" />
<item id="i03" label="item03" imageMso="PanningHand" />
</comboBox>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
Option Compare Database
Option Explicit
Private rbn As IRibbonUI
Sub onLoad(ribbon As IRibbonUI)
Set rbn = ribbon
End Sub
Sub getText(ctr As IRibbonControl, rtn)
rtn = "(未選択)"
End Sub
Sub Invalidate_cb01()
rbn.InvalidateControl "cb01"
End Sub
Option Compare Database
Option Explicit
Private Sub Form_Close()
Module1.Invalidate_cb01
End Sub
Option Compare Database
Option Explicit
Private rbn As IRibbonUI
Sub onLoad(ribbon As IRibbonUI)
Set rbn = ribbon
End Sub
Sub getText(ctr As IRibbonControl, rtn)
rtn = "(未選択)"
DoEvents
End Sub
Sub Invalidate_cb01()
rbn.InvalidateControl "cb01"
End Sub
Option Compare Database
Option Explicit
Private Sub Form_Load()
On Error Resume Next '初回のエラーだけ処理したい
Module1.Invalidate_cb01
End Sub
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon>
<contextualTabs>
<tabSet idMso="TabSetFormReportExtensibility">
<tab id="tab02" label="オブジェクトが開かれたときアクティブになる">
<group id="g02" label="グループ02">
<labelControl id="lbl01" label="contextualTabs" />
</group>
</tab>
<tab id="tab03" label="タブ03">
<group id="g03" label="グループ03">
<button id="btn02" label="ボタン02" imageMso="Info" />
</group>
</tab>
</tabSet>
</contextualTabs>
<tabs>
<tab id="tab01" label="タブ01" insertAfterMso="TabHomeAccess">
<group id="g01" label="グループ01">
<button idMso="ApplicationOptionsDialog" visible="true" />
<button idMso="FileCloseDatabase" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>
Option Compare Database
Option Explicit
Private Const VK_ESCAPE = &H1B
Private Const KEYEVENTF_KEYUP = &H2
Private Const KEYEVENTF_EXTENDEDKEY = &H1
'http://msdn.microsoft.com/ja-jp/library/cc364822.aspx
'SendInputを使えとなってるけど、別途x64対応せにゃならんからこっち使う。
Private Declare PtrSafe Sub keybd_event Lib "user32" ( _
ByVal bVk As Byte, _
ByVal bScan As Byte, _
ByVal dwFlags As Long, _
ByVal dwExtraInfo As LongPtr)
Sub onShow(cntxt As Object)
keybd_event VK_ESCAPE, 0, 0, 0
keybd_event VK_ESCAPE, 0, KEYEVENTF_KEYUP, 0
End Sub
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui"> <backstage onShow="onShow" /> </customUI>なのだけど、結局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="フォーム"/>