Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 15342|回复: 36

2007/2010版本菜单栏里定制个性化2003菜单栏

  [复制链接]
发表于 2011-1-21 13:32 | 显示全部楼层 |阅读模式
本帖最后由 爱疯 于 2011-10-14 22:34 编辑

在2007版和2010版中效果如图所示:
(源代码回复可见)

[hide ] Private Sub ShowOldStyleMenus()
    On Error Resume Next
    Dim cBar As CommandBar
    Dim cBarCtrl As CommandBarControl
    Dim sMenuName As String
    Dim sToolbarName As String
    Dim iMenu As Integer

    sMenuName = "Old Style Menu"
    sToolbarName = "Old StyleToolbar"
    CommandBars(sMenuName).Delete '如果之前有菜单栏,删除之
    Set cBar = CommandBars.Add(sMenuName, , , True) '添加命令栏,名字为sMenuName,是一个临时菜单栏,即常用菜单项
    '参考:Set newMbar = CommandBars.Add _
     (Name:="newMenubar", Position:=msoBarRight, _
      MenuBar:=True, temporary:=True)
    With cBar
        .Visible = True '临时菜单栏可见
        For iMenu = 1 To 10
            Set cBarCtrl = .Controls.Add(Type:=msoControlPopup, ID:=30001 + iMenu) '依次添加2003版的弹出是菜单
        Next iMenu
        Set cBarCtrl = .Controls.Add(Type:=msoControlPopup, ID:=30022) '图表菜单
        Set cBarCtrl = .Controls.Add(Type:=msoControlPopup, ID:=30177) '自选图形
    End With
    CommandBars(sToolbarName).Delete '删除临时菜单栏
    Set cBar = CommandBars.Add(sToolbarName, , , True) '设置变量
    With cBar
        .Visible = True
        Set cBarCtrl = .Controls.Add(Type:=msoControlButton, ID:=2520) 'New
        Set cBarCtrl = .Controls.Add(Type:=msoControlButton, ID:=23) 'Open
        Set cBarCtrl = .Controls.Add(Type:=msoControlButton, ID:=3) 'Save
        Set cBarCtrl = .Controls.Add(Type:=msoControlButton, ID:=4) 'Print
        Set cBarCtrl = .Controls.Add(Type:=msoControlButton, ID:=109) 'Print Preview
        Set cBarCtrl = .Controls.Add(Type:=msoControlButton, ID:=2) 'Spelling
        Set cBarCtrl = .Controls.Add(Type:=msoControlButton, ID:=21) 'Cut
        Set cBarCtrl = .Controls.Add(Type:=msoControlButton, ID:=19) 'Copy
        Set cBarCtrl = .Controls.Add(Type:=msoControlButton, ID:=22) 'Paste
        Set cBarCtrl = .Controls.Add(Type:=msoControlButton, ID:=108) 'Format Painter
        Set cBarCtrl = .Controls.Add(Type:=msoControlButton, ID:=210) 'Sort Ascending
        Set cBarCtrl = .Controls.Add(Type:=msoControlButton, ID:=211) 'Sort Descending
        Set cBarCtrl = .Controls.Add(Type:=msoControlButton, ID:=984) 'Help
        Set cBarCtrl = .Controls.Add(Type:=msoControlComboBox, ID:=1728) 'Font
        Set cBarCtrl = .Controls.Add(Type:=msoControlComboBox, ID:=1731) 'Font Size
        Set cBarCtrl = .Controls.Add(Type:=msoControlButton, ID:=113) 'Bold
        Set cBarCtrl = .Controls.Add(Type:=msoControlButton, ID:=114) 'Italic
        Set cBarCtrl = .Controls.Add(Type:=msoControlButton, ID:=115) 'Underline
        Set cBarCtrl = .Controls.Add(Type:=msoControlButton, ID:=120) 'Align Left
        Set cBarCtrl = .Controls.Add(Type:=msoControlButton, ID:=122) 'Center
        Set cBarCtrl = .Controls.Add(Type:=msoControlButton, ID:=121) 'Align Right
        Set cBarCtrl = .Controls.Add(Type:=msoControlButton, ID:=402) 'Merge and Center
        Set cBarCtrl = .Controls.Add(Type:=msoControlButton, ID:=395) 'Accounting Number Format
        Set cBarCtrl = .Controls.Add(Type:=msoControlButton, ID:=396) 'Percent Style
        Set cBarCtrl = .Controls.Add(Type:=msoControlButton, ID:=397) 'Comma Style
        Set cBarCtrl = .Controls.Add(Type:=msoControlButton, ID:=398) 'Increase Decimal
        Set cBarCtrl = .Controls.Add(Type:=msoControlButton, ID:=399) 'Decrease Decimal
        Set cBarCtrl = .Controls.Add(Type:=msoControlButton, ID:=3162) 'Decrease Indent
        Set cBarCtrl = .Controls.Add(Type:=msoControlButton, ID:=3161) 'Increase Indent
    End With '依次设置常用的命令
    Set cBar = Nothing '清楚变量
    Set cBarCtrl = Nothing
    On Error GoTo 0
End Sub

[/hide]
以上命令代码可以随意定制,详细的Msocotrolbutton的ID,名字以及图标见附件。有了这个对照表就可以任意定制常用的功能菜单了。

参考:http://blog.livedoor.jp/andrewe/archives/50820196.html
感谢:百宝箱里的获取ID 功能,以及ttgg93版主和阿木版主以及chrisfang的贡献







本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 1 +20 收起 理由
轩辕轼轲 + 20 很好很强大

查看全部评分

发表于 2011-1-21 14:18 | 显示全部楼层
回复

使用道具 举报

发表于 2011-1-21 14:53 | 显示全部楼层
貌似几句话就完结了
  1. Sub Test()
  2.     Set tbar = Application.CommandBars.Add("mybar")
  3.     tbar.Visible = True
  4.     For Each a In Array(1, 4, 8, 10, 13, 18, 23, 27, 28)
  5.         Application.CommandBars("Built-in Menus").Controls(a).Copy tbar
  6.     Next
  7. End Sub
复制代码
参考:出一个VBA题目:为Excel 2007设计经典菜单 http://www.exceltip.net/thread-5678-1-1-11314.html

评分

参与人数 2 +60 金币 +40 收起 理由
爱疯 + 40 + 40 很给力!
轩辕轼轲 + 20

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2011-1-21 15:20 | 显示全部楼层
amulee 发表于 2011-1-21 14:53
貌似几句话就完结了参考:出一个VBA题目:为Excel 2007设计经典菜单 http://www.exceltip.net/thread-5678-1 ...

果真如此,哈哈,这样就可以自定义自己需要的功能,就是那些ID 我还不知道在那里找到,如果找到那些ID ,想自己自定义工具栏
回复

使用道具 举报

发表于 2011-1-21 15:24 | 显示全部楼层
要ID的话,自己编一段程序遍历所有的工具栏和按钮就能得到了。
回复

使用道具 举报

发表于 2011-1-21 16:04 | 显示全部楼层
学习一下
回复

使用道具 举报

 楼主| 发表于 2011-1-23 01:33 | 显示全部楼层
amulee 发表于 2011-1-21 15:24
要ID的话,自己编一段程序遍历所有的工具栏和按钮就能得到了。

该代码我还不会写,提问后版主搞定了。谢谢ttgg93版主和你
见:http://www.excelpx.com/thread-156717-1-1.html

  1. Sub MenuList()
  2.        On Error Resume Next
  3.        Dim Nx As CommandBar
  4.        Dim I As Integer
  5.        For Each Nx In Application.CommandBars
  6.            I = I + 1
  7.            Range("A" & I).Value = Nx.Name
  8.            Range("C" & I).Value = Nx.NameLocal
  9.            For Each X In Application.CommandBars(Nx.Name).Controls
  10.                I = I + 1
  11.                Range("B" & I).Value = X.ID
  12.                Range("C" & I).Value = X.Caption
  13.                Range("D" & I).Value = X.FaceId
  14.            Next
  15.        Next
  16.    End Sub
复制代码

评分

参与人数 1 +20 收起 理由
轩辕轼轲 + 20

查看全部评分

回复

使用道具 举报

发表于 2011-1-23 11:57 | 显示全部楼层
这个帖子要收藏
回复

使用道具 举报

发表于 2011-1-23 14:23 | 显示全部楼层
学习……………………………………
回复

使用道具 举报

发表于 2011-1-23 21:20 | 显示全部楼层
学习来了,我来学习来了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-1 15:43 , Processed in 0.591080 second(s), 6 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表