Excel精英培训网

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

[已解决]【BB封顶求教】菜单添加宏问题?

[复制链接]
发表于 2011-9-20 01:54 | 显示全部楼层 |阅读模式
50学分
本帖最后由 xdwy81129 于 2011-9-20 01:55 编辑

求问的中心是指定的宏会在前面自动把当前文件的路径加进去,导致该文件重命名或者存放位置归还以后,该宏指向的不是本工作薄的内部宏过程。

具体描述问题如下

1.手工操作如下:新建了一个“学习”菜单,里面建立了一个叫“自己”的按钮,指向本工作薄内的过程“菜单msg”
MsgBox Application.CommandBars("学习").Controls("自己").OnAction
这个结果是:'D:\dnglwen\桌面\问—菜单.xls'!菜单msg
这个前面就无缘无故多了一个本工作薄的路径
未命名.JPG

2.vba重新把自己”的按钮指向其他的过程,如“过程”名字的宏
Sub 菜单hong()
Application.CommandBars("学习").Controls("自己").OnAction = "过程"
End Sub

MsgBox Application.CommandBars("学习").Controls("自己").OnAction
结果还是:'D:\dnglwen\桌面\问—菜单.xls'!过程

所以对excel2003这样自作聪明的行为是否懊恼,所以请求各位高手,看如何解决,即建立的自定义工具栏里面的按钮指向的宏不会添加该路径,这样该文件在什么位置都可以使用了,包括重命名。

个人也认为这个问题很奇怪,因为从网上下载的一些excel文件,里面附加了自定义工具栏的,这些自定义工具栏里面指向的宏都是自己工作薄的宏,可以c盘下打开一次,运行对的,如何关闭excel文件,把文件复制到D盘,又打开,在执行自定义工具栏里面的宏,也还是对的


可我现在所有自己的自定义操作,就不能这样,因为该按钮具体包含了该宏的全部路径名称(即工作薄名称),如果c盘第一次打开该文件,关闭
然后复制该文件到d盘,然后再打开,点击该自定义工具里面的按钮就会弹出对话框,要求打开c盘的文件,因为该按钮指向的宏是c盘第一次打开的该文件,如图(图第一个打开的位置是桌面)
未命名22.JPG

希望我这么详细的表示问题,大家可以彻底的明白我的问题和解决办法
问—菜单.rar (29.08 KB, 下载次数: 5)

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2011-9-20 09:44 | 显示全部楼层
Sub 菜单添加()
    Dim cddd As CommandBar
    Dim buttonA As CommandBarControl
   
    ' 添加菜单前要添除自定义菜单,这样可以避免建立多个菜单或者菜单不是指向期望的位置---楼主的问题
    For Each cddd In Application.CommandBars
        If cddd.Name = "学习" Then
            cddd.Delete
        End If
    Next cddd
   
    ' 建立自定义菜单
    Set cddd = Application.CommandBars.Add
    With cddd
        .Visible = True
        .Name = "学习"
        ''''.Name = "老师"
    End With    '
    '. '
   
    ' 建立按钮,映射要执行的过程等
    Set buttonA = cddd.Controls.Add(msoControlButton)
    With buttonA
        .Caption = "自己"
        .OnAction = "过程"
        .FaceId = 10
    End With
End Sub
问—菜单.rar (13.56 KB, 下载次数: 3)

评分

参与人数 1 +18 收起 理由
xdwy81129 + 18 很给力!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2011-9-20 11:26 | 显示全部楼层
回复 吕?布 的帖子

请问,菜单指向的宏都全部是包含全路径的宏名?不可以指向没有工作薄路径的宏名吗(即本工作薄的宏)??

即希望
MsgBox Application.CommandBars("学习").Controls("自己").OnAction
的结果是:问—菜单.xls'!菜单msg或者直接是 菜单msg

点评

全路径都出来了,还怕取不到不是全路径的?关键你这个是取值,不是设置(如果是设置OnAction必须要全路径那才是问题)  发表于 2011-9-20 13:58
回复

使用道具 举报

发表于 2011-9-20 11:45 | 显示全部楼层
{:031:}{:111:}观望下。
回复

使用道具 举报

发表于 2011-9-20 13:55 | 显示全部楼层
xdwy81129 发表于 2011-9-20 11:26
回复 吕?布 的帖子

请问,菜单指向的宏都全部是包含全路径的宏名?不可以指向没有工作薄路径的宏名吗(即 ...

msgbox能显示出来不是很好吗?我想出也是必须的,想反如果不能取得倒是很不好。

在设定按钮的OnAction时,如果是本工作簿里的过程,就不用加上路径。

我看来看去,没觉这样处理有任何什么不妥。

按钮本身是记录了他是链接到哪个文件的哪个过程的。讲到底,按钮一旦建立,便是基于Excel程序的,而非某一个单独Excel文件的.所以你自己的文件打开后建立了一个菜单,文件关闭后菜单依然存在。你再点菜单便会调用原来文件里的过程。

有时你所有的文件都关了,没有一个空的Excel开在那,那时按钮指向哪里呢,你的说法是当前工作表,而那个当前工作表根本就不存在。

评分

参与人数 1 +10 收起 理由
xdwy81129 + 10 谢谢关注问题

查看全部评分

回复

使用道具 举报

发表于 2011-9-21 04:11 | 显示全部楼层
不错,收藏了。。。
回复

使用道具 举报

发表于 2011-9-21 12:53 | 显示全部楼层    本楼为最佳答案   
本帖最后由 335081548 于 2011-9-21 13:11 编辑

个人也认为这个问题很奇怪,因为从网上下载的一些excel文件,里面附加了自定义工具栏的,这些自定义工具栏里面指向的宏都是自己工作薄的宏,可以c盘下打开一次,运行对的,如何关闭excel文件,把文件复制到D盘,又打开,在执行自定义工具栏里面的宏,也还是对的

因为别人的 自定义工具栏用了二个事件。一个是打开事件(创建菜单工具栏),一个是关闭工作簿事件(删除工具栏菜单)
ThisWorkbook:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
     '删除菜单工具栏
End Sub
Private Sub Workbook_Open()
      '创建工具栏菜单
End Sub
            试想一下,每次打开都是新建(菜单工具栏)  所以肯定能用,关闭就删除(菜单工具栏)。这样工作簿文件改名,移动位置。显然不会影响到宏的使用。如果,要将菜单作为程序级使用。把工作簿文件测试好后,另存为加载宏。然后加载该工作簿。这样就能每次启动Excel,就会自动加载宏(工具菜单栏)。这样你的自定义菜单工具栏就随Excel程序启动而启动,关闭而关闭。

可以参阅一下这个贴子
http://www.excelpx.com/forum.php?mod=viewthread&tid=200094&page=1#pid2859590

评分

参与人数 1 +18 收起 理由
xdwy81129 + 18 谢谢关注问题和找到问题所在,不懂的地方在.

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2011-9-22 11:37 | 显示全部楼层
回复 335081548 的帖子

谢谢,问题的症结就是这个:....自定义工具栏里面指向的宏都是自己工作薄的宏,可以c盘下打开一次,运行对的,如何关闭excel文件,把文件复制到D盘,又打开,在执行自定义工具栏里面的宏,也还是对的
回复

使用道具 举报

发表于 2011-9-23 09:13 | 显示全部楼层
我也不是很懂,看热闹
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-23 20:59 , Processed in 0.289411 second(s), 8 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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