Excel精英培训网

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

[已解决]禁用所有菜单(或菜单栏)

[复制链接]
发表于 2010-2-9 12:10 | 显示全部楼层 |阅读模式

Sub a()
    Dim c As CommandBar
   
    For Each c In CommandBars
        c.Enabled = 0
    Next c
End Sub

1、这样,就完全达到禁用所有菜单(或菜单栏)了么?

2、在不重装或修复exce的情况下,改值为1,是唯一恢复的方式么,即有手工或其他办法么?

谢谢!

最佳答案
2010-2-10 09:52

爱疯提了个好问题,之前一直没有细想。经爱疯提醒,我做了如下的试验。

先来看CommandBars

CommandBars 属性

返回 CommandBars 对象,该对象代表 Microsoft Excel 命令栏。只读。

Application 对象一起使用。本属性返回所有对该应用程序有效的内置及自定义命令栏。

这里的工具栏是依附于Application的,就是当前Application的工具栏。

我们可以同时打开两个Excel程序(开始-〉程序里面打开),然后在其中一个程序里的表格里面运行以下代码:

Sub a()

    Dim c As CommandBar

For Each c In CommandBars

        c.Enabled = 0

Next c

End Sub

然后再分别看两个Excel程序的菜单,我们看到什么?两个是不是不一样?其实,两个程序其实是分别独立的。在这种情况下,Application下的Commandbars也是独立的。

然后再来看看COMAddIns

COMAddIns 集合对象

参阅属性方法事件特性

COMAddIn 对象的集合,它提供有关在 Windows 注册表中注册的 COM 加载项的信息。

使用 COMAddIns 集合

Application 对象的 COMAddIns 属性返回 Microsoft Office 宿主应用程序的 COMAddIns 集合。

这个COMAddIns也是在Application之下的,同样可以采取上述的操作打开两个Excel程序,在其中一个程序里面运行如下代码:

Sub 按钮1_Click()

'去除加载项特殊符号

Application.COMAddIns("OfficeSymbol.Connect").Connect = False

End Sub

看到什么效果?没有运行过这个代码的程序依然有插入特殊符号这个菜单项。这两个Excel程序是分别独立的。

那么怎么样才能让上述代码达到效果呢?我们用前一个CommandBars的例子。然后给两个程序分别命名为E1(有菜单栏的)和E2(没有菜单栏的),确保当前没有其它Excel程序打开,然后采取以下操作。

情形一:先关闭E1,再关闭E2,然后再重新打开Excel,看到了么?菜单栏消失了。

情形二:先关闭E2,再关闭E1,然后再重新打开Excel,看到了么?菜单栏还在。

然后我们恢复菜单栏,单独打开一个Excel文件,运行那个a代码,然后关闭Excel,再次打开Excel,可以看到菜单栏消失了。

COMAddIns中也可以看到同样的情形。

鉴于上述结果,可以看到其实上面的代码其实起了作用,但是运行了上述代码后系统其实并没有保存最后的设置。通过上面的试验,可以猜到,其实系统会保存这个设置,是在这个程序最后关闭的时候保存的。这个设置其实保存在一个XLB文件中,这个文件的位置是C:Documents and Settings\用户名\Application DataMicrosoftExcel 其中,【用户名】代表您计算机上的登录名。对于Excel 2003来说,该文件名为Excel11.xlb

那么,我们再回到最初的问题:a代码在不重装或修复excel的情况下,改值为1,是唯一恢复的方式么,即有手工或其他办法么?

其实删除上面这个XLB文件就行了。重新打开Excel的时候,系统会自动再按默认配置重建一个。

[此贴子已经被作者于2010-2-10 9:53:09编辑过]
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2010-2-9 12:29 | 显示全部楼层

其实禁用不了。。。

你运行了这个a后,再打开一个Excel程序看看。

回复

使用道具 举报

发表于 2010-2-9 12:39 | 显示全部楼层

[em06][em06]

一点不懂

[此贴子已经被作者于2010-2-9 12:39:47编辑过]
回复

使用道具 举报

 楼主| 发表于 2010-2-9 17:14 | 显示全部楼层

QUOTE:
以下是引用amulee在2010-2-9 12:29:00的发言:

其实禁用不了。。。

你运行了这个a后,再打开一个Excel程序看看。

确实。怎么会这样?

Sub 按钮1_Click()
    '去除加载项特殊符号
    Application.COMAddIns("OfficeSymbol.Connect").Connect = False
End Sub


运行这个后发现不再加载,即修改被保存了。为什么1楼的修改没被保存呢?

回复

使用道具 举报

发表于 2010-2-9 21:56 | 显示全部楼层

我猜想可以把那个XLB文件(好象是的)删除便行了,因为要删除自定义菜单可以这样的
回复

使用道具 举报

发表于 2010-2-10 09:52 | 显示全部楼层    本楼为最佳答案   

爱疯提了个好问题,之前一直没有细想。经爱疯提醒,我做了如下的试验。

先来看CommandBars

CommandBars 属性

返回 CommandBars 对象,该对象代表 Microsoft Excel 命令栏。只读。

Application 对象一起使用。本属性返回所有对该应用程序有效的内置及自定义命令栏。

这里的工具栏是依附于Application的,就是当前Application的工具栏。

我们可以同时打开两个Excel程序(开始-〉程序里面打开),然后在其中一个程序里的表格里面运行以下代码:

Sub a()

    Dim c As CommandBar

For Each c In CommandBars

        c.Enabled = 0

Next c

End Sub

然后再分别看两个Excel程序的菜单,我们看到什么?两个是不是不一样?其实,两个程序其实是分别独立的。在这种情况下,Application下的Commandbars也是独立的。

然后再来看看COMAddIns

COMAddIns 集合对象

参阅属性方法事件特性

COMAddIn 对象的集合,它提供有关在 Windows 注册表中注册的 COM 加载项的信息。

使用 COMAddIns 集合

Application 对象的 COMAddIns 属性返回 Microsoft Office 宿主应用程序的 COMAddIns 集合。

这个COMAddIns也是在Application之下的,同样可以采取上述的操作打开两个Excel程序,在其中一个程序里面运行如下代码:

Sub 按钮1_Click()

'去除加载项特殊符号

Application.COMAddIns("OfficeSymbol.Connect").Connect = False

End Sub

看到什么效果?没有运行过这个代码的程序依然有插入特殊符号这个菜单项。这两个Excel程序是分别独立的。

那么怎么样才能让上述代码达到效果呢?我们用前一个CommandBars的例子。然后给两个程序分别命名为E1(有菜单栏的)和E2(没有菜单栏的),确保当前没有其它Excel程序打开,然后采取以下操作。

情形一:先关闭E1,再关闭E2,然后再重新打开Excel,看到了么?菜单栏消失了。

情形二:先关闭E2,再关闭E1,然后再重新打开Excel,看到了么?菜单栏还在。

然后我们恢复菜单栏,单独打开一个Excel文件,运行那个a代码,然后关闭Excel,再次打开Excel,可以看到菜单栏消失了。

COMAddIns中也可以看到同样的情形。

鉴于上述结果,可以看到其实上面的代码其实起了作用,但是运行了上述代码后系统其实并没有保存最后的设置。通过上面的试验,可以猜到,其实系统会保存这个设置,是在这个程序最后关闭的时候保存的。这个设置其实保存在一个XLB文件中,这个文件的位置是C:Documents and Settings\用户名\Application DataMicrosoftExcel 其中,【用户名】代表您计算机上的登录名。对于Excel 2003来说,该文件名为Excel11.xlb

那么,我们再回到最初的问题:a代码在不重装或修复excel的情况下,改值为1,是唯一恢复的方式么,即有手工或其他办法么?

其实删除上面这个XLB文件就行了。重新打开Excel的时候,系统会自动再按默认配置重建一个。

[此贴子已经被作者于2010-2-10 9:53:09编辑过]
回复

使用道具 举报

 楼主| 发表于 2010-2-10 10:52 | 显示全部楼层

谢谢阿木!

如果是2个不存在(没存盘)的文件。如你所说 ...

如果是2个已存在(存过盘)的文件。都打开后,运行其中一个文件里的a(),结果2个文件的所有菜单都屏蔽了呀??

VqhtPQXI.rar (305.35 KB, 下载次数: 68)

禁用所有菜单(或菜单栏)

禁用所有菜单(或菜单栏)
回复

使用道具 举报

发表于 2010-2-10 10:55 | 显示全部楼层

不要打开文件,而是分别打开两个Excel程序,即直接运行程序,从开始--〉程序里面打开两个Excel。

打开两个文件后,其实启动的是同一个Excel程序。

回复

使用道具 举报

 楼主| 发表于 2010-2-10 11:03 | 显示全部楼层

QUOTE:
以下是引用amulee在2010-2-10 10:55:00的发言:

不要打开文件,而是分别打开两个Excel程序,即直接运行程序,从开始--〉程序里面打开两个Excel。

打开两个文件后,其实启动的是同一个Excel程序。

哦,连着启动2次excel程序呀。

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-17 03:22 , Processed in 0.326920 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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