今回はdynamicMenu要素のgetContent属性のコールバックを利用して、リボンからプリンタを選択して簡単に印刷できるようにする方法を紹介します(Word)。
[リボンXML]
<?xml version="1.0" encoding="utf-8"?> <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <ribbon> <tabs> <tab idMso="TabHome"> <group id="grpPrint" label="印刷" insertBeforeMso="GroupClipboard"> <dynamicMenu id="dmuPrint" label="印刷 " size="large" imageMso="FilePrint" screentip="プリンター選択" supertip="ここをクリックして印刷するプリンターを選択してください。" getContent="dmuPrint_getContent" /> </group> </tab> </tabs> </ribbon> </customUI>
[標準モジュール]
Option Explicit Private Sub dmuPrint_getContent(control As IRibbonControl, ByRef returnedVal) Dim d As Object Dim elmMenu As Object Dim elmButton As Object Dim itm As Object Dim i As Long i = 1 Set d = CreateObject("Msxml2.DOMDocument") Set elmMenu = d.createElement("menu") elmMenu.setAttribute "xmlns", "http://schemas.microsoft.com/office/2006/01/customui" elmMenu.setAttribute "itemSize", "large" With CreateObject("Shell.Application") For Each itm In .Namespace(4).Items Set elmButton = d.createElement("button") elmButton.setAttribute "id", "btnPrinter" & i elmButton.setAttribute "label", itm.Name elmButton.setAttribute "tag", itm.Name elmButton.setAttribute "imageMso", "FilePrint" elmButton.setAttribute "onAction", "btnPrinter_onAction" elmMenu.appendChild elmButton Set elmButton = Nothing i = i + 1 Next End With d.appendChild elmMenu returnedVal = d.XML Set elmMenu = Nothing Set d = Nothing End Sub Private Sub btnPrinter_onAction(control As IRibbonControl) Dim tmp As String tmp = Application.ActivePrinter Application.ActivePrinter = control.Tag Application.Dialogs(wdDialogFilePrint).Show Application.ActivePrinter = tmp End Sub
上記コードを設定したファイルを開くと、「ホーム」タブに「印刷」グループが追加されます。
「印刷」メニューからプリンタを選択することで、プリンタを選択した状態で印刷ダイアログを表示することができます。
この記事へのコメントはありません。