officeba > 单独文章


如何在Excel2007中制作动态菜单

在Excel2007中最有趣的Ribbon控件之一是动态菜单控件。该控件使用VBA代码将XML数据放到控件中——提供了基于内容改变的菜单的基础。
创建一个动态菜单控件不是一项简单的工作,但在使用VBA动态修改Ribbon方面,该控件可能提供最大的灵活性。
这里,创建了一个简单的动态菜单控件演示,为Excel2007工作簿中的三个工作表中的每一个显示不同的菜单。图1展示了激活工作表sheet1时出现的菜单。当激活一个工作表时,VBA过程发送为工作表指定的XML代码。在本示例中,直接存储XML代码在工作表里,使之更易阅读。此外,XML标志可以作为字符串变量存储在代码中。

动态菜单近件使得可以取决于内容来创建变化的菜单

图1:动态菜单近件使得可以取决于内容来创建变化的菜单
创建新选项卡、新组和动态菜单控件的RibbonX代码如下:
<customUI xmlns=”https://schemas.microsoft.com/office/2006/01/customui“
onLoad=”ribbonLoaded”>
  <ribbon>
  <tabs>
    <tab id=”CustomTab” label=”Dynamic”>
        <group id=”group1″ label=”Dynamic Menu Demo”>
          <dynamicMenu id=”DynamicMenu”
              getContent=”dynamicMenuContent”
              imageMso=”RegionLayoutMenu”
              size = “large”
              label=”Sheet-Specific Menu”/>
          </group>
      </tab>
    </tabs>
    </ribbon>
</customUI>
本示例需要无论何时用户激活新工作表时,都使Ribbon无效的一种方式。这里使用了先前显示分页符的示例相同的方法。声明了一个IRibbonUI类型的Public变量MyRibbon,无论何时激活一个新工作表,都将在Workbook_SheetActivate过程中调用UpdateDynamicRibbon过程:
Sub UpdateDynamicRibbon()
‘   Invalidate the Ribbon to force a call to dynamicMenuContent
    On Error Resume Next
    MyRibbon.Invalidate
    If Err.Number <> 0 Then
        MsgBox “Lost the Ribbon object. Save and reload.”
    End If
End Sub
UpdateDynamicRibbon过程使MyRibbon对象无效,强制对名为dynamicMenuContent(一个通过RibbonX代码里getContent参数引用的过程)的VBA回调过程的调用。注意错误处理代码。一些对VBA代码的编辑销毁了MyRibbon对象,而该对象是在打开工作簿时创建的。试图使不存在的对象无效将会导致错误,消息框将通知用户必须保存工作簿后再重新打开。而重新打开该工作簿是重新创建MyRibbon对象的唯一方式。
dynamicMenuContent过程的代码如下。该过程遍历活动工作表A列中的单元格,读取XML代码,将其保存在名为XMLcode的变量中。当附加了所有的XML后,传递给returnedVal参数,使动态菜单控件有新的代码,因此显示一组不同的菜单选项。
Sub dynamicMenuContent(control As IRibbonControl, _
   ByRef returnedVal)
    Dim r As Long
    Dim XMLcode As String
‘   Read the XML markup from the active sheet
    For r = 1 To Application.CountA(Range(”A:A”))
        XMLcode = XMLcode & ActiveSheet.Cells(r, 1) & ” “
    Next r
    returnedVal = XMLcode
End Sub


声明:欢迎各大网站转载本站文章,还请保留一条能直接指向本站的超级链接,谢谢!

时间:2008-04-20 09:05:56,点击:65824


【OfficeBa论坛】:阅读本文时遇到了什么问题,可以到论坛进行交流!Excel专家邮件:342327115@qq.com(大家在Excel使用中遇到什么问题,可以咨询此邮箱)。

【声明】:以上文章或资料除注明为Office自创或编辑整理外,均为各方收集或网友推荐所得。其中摘录的内容以共享、研究为目的,不存在任何商业考虑。如有任何异议,请与本站联系,本站确认后将立即撤下。谢谢您的支持与理解!


相关评论

我要评论

评论内容