将excel宏安全性调到中:

按alt+f11进入vba编辑器:

记住以下快捷键:

F7 代码窗口

F4 属性窗口

ctrl+R 工程资源窗口

F5 程序运行

TAb 代码缩进

SHIFT+TAB  凸出

加菜单:

在excel表中按alt+f11进入代码窗口:


解释:

第一行:vbaproject (测试.xls)   是excel表的文件名。

第二行:microsoft excel对象 表示vba针对的对象是sheet(data),还是thisworkbook(本工作表)

第三行:窗体,是用来设计窗体用的,即,界面容器

第四行:模块。比如设计菜单,就需要用到。(什么叫模块?鼠标能点的都叫模块,比如要做的菜单,要点击的按钮、sheet1等,它也是一种容器,用于存放用户代码)

 什么是类?

Dim tx1 As Textbox

这里我们用到一个类Textbox定义了一个对象tx1

类是一个隐者,上面Textbox是VBA已经给我们准备好的一个类,我们无法知道VBA是怎么准备的(它的真身被隐藏了),但我们可以知道对象tx1怎么用。VBA把对对象的使用划分为三种,属性、方法和事件。

1.窗体模块 
由于VB是面向对象的应用程序开发工具,所以应用程序的代码结构就是该程序在屏幕上表示的对应模型。根据定交,对象包含数据和代码。应用程序中的每个窗体都有一个相对应的窗体模块(文件扩展名为.frm) 
窗体模块是VB应用程序的基础。窗体模块可以包含处理事件的过程、通用过程以及变量、常数、自定义类型和外部过程的窗体级声明。写入窗体模块的代码是该窗体所属的具体应用程序专用的;也可以引用该程序内的其它窗体和对象 
每个窗体模块都包含事件过程,在事件过程中有为响应该事件而执行的程序段。窗体可包含控件。在窗体模块中,对窗体上的每个控件都有一个对应的事件过程集。除了事件过程,窗体模块还可包含通用过程,它对来自该窗体中任何事件过程的调用都作出响应。

2.标准模块 
标准模块是程序中的一个独立容器,包含全局变量、Function(函数)过程和Sub过程(子过程)。 
可将那些与特定窗体或控件无关的代码放入标准模块中。标准模块中包含应用程序内的允许其它模块访问的过程和声明。它们可以包含变量、常数、类型、外部过程和全局声明或模块级声明。

3.类模块 
在VB中类模块是面向对象编程的基础。可以在类模块中编写代码建立新对象。这些新对象可以包含自定义的属性和方法。实际上,窗体正是这样一种类模块,在其上可安放控件,可显示窗体窗口。
用类模块创建对象,这些对象可被应用程序内的过程调用。标准模块只包含代码,而类模块包含代码又包含数据,可视为没有物理表示的控件。

step 1:双击thisworkbook,打开代码窗口输入:

Private Sub Workbook_Open() '打开文件时自动加载自定义菜单项
    Menu_Create
End Sub
           
Private Sub Workbook_BeforeClose(Cancel As Boolean) '关闭文件时自动卸载自定义菜单项
   Menu_Delete
End Sub

step 2:在工程窗口,右键,插入,模块:

在属性里将名称改为:menu

双击menu,输入以下代码:

Sub Menu_Create()
    Dim myMnu As Object
    Set myMnu = CommandBars("Worksheet menu bar").Controls. Add(Type:=msoControlPopup, Before:=10)

With myMnu
    .Caption = "关于 &(A)"
    End With

menuItem_Create
End Sub
        
        
Sub menuItem_Create()
    With Application.CommandBars("Worksheet menu bar").Controls("关于 &(A)")
    .Controls.Add(Type:=msoControlButton, Before:=1).Caption = "帮助"
    .Controls("帮助").OnAction = "宏1"
    .Controls.Add(Type:=msoControlButton, Before:=1).Caption = "注册"
    .Controls("注册").OnAction = "宏2"
    End With
End Sub
        
        
Sub Menu_Delete()
CommandBars("Worksheet menu bar").Controls("关于 &(A)").Delete
End Sub

其中,宏1,宏2可以进行单独的程序编写。

保存,再次打开此文件后,菜单中出现:

恢复菜单

如果出现程序错误,而导致菜单固定,可用代码恢复:

在thisworkbook里输入:

Sub RestroeBar()
     Application.CommandBars("Worksheet menu bar").Reset
End Sub

然后运行此代码,即可。

还有一种办法恢复:

在Windows XP中,删除“C:\Documents and Settings\用户名\Application Data\Microsoft\Excel”文件夹中的“Excel11.xlb”文件,而在Windows Vista中,该文件在“C:\用户\用户名\AppData\Roaming\Microsoft\Excel”文件夹中。“Excel11.xlb”文件中保存了Excel 2003自定义菜单栏和工具栏设置,删除该文件后Excel将自动恢复默认的菜单栏和工具栏。

呃,很多人会找不到这个文件。Application Data是隐藏的。

如果要加载菜单到鼠标右键中

则在thisworkbook里加入下面代码:

'*****************************************************************
'时间:2011-4-24
'功能:在Excel2007版右键菜单中生成2003版菜单

'来源:http://hi.baidu.com/winas
'*****************************************************************

Sub addto_rightkey()

With Application.CommandBars("cell")
.Reset

With .Controls.Add(Type:=msoControlButton, before:=1)
.Caption = "新加入的右键菜单"
.BeginGroup = True
.OnAction = "do_right"
End With

End With

End Sub

'---------------------------------
Sub do_right()
Application.CommandBars("Built-in Menus").ShowPopup
End Sub

'*****************************************************************

Sub del_rightkey()
Application.CommandBars("cell").Reset
End Sub

菜单的属性

在 VBA 和 Microsoft Visual Basic 中,按钮和菜单项用 CommandBarButton 对象表示。显示菜单和子菜单的弹出控件用 CommandBarPopup 对象表示。

其他,请参考F1.

commandbarbutton的属性与方法

Add 

添加菜单栏,方法是使用 CommandBars 对象集合的 Add 方法,然后为 Menubar 参数指定 TRUE 值。

Enabled 

如果 Enabled 属性的值为 TRUE,那么用户可以使用 Visual Basic 代码使指定的菜单栏可见。如果 Enabled 属性的值为 FALSE,用户就无法让菜单栏可见。不过,菜单栏将出现在可用命令栏列表中。
Protection 

使您可以通过特定用户操作来保护菜单栏。
Position 

指定新菜单栏相对于程序窗口的位置。菜单栏相对于程序窗口的位置可以是以下 MsoBarPosition 常量属性之一:msoBarLeft、msoBarTop、msoBarRight、msoBarBottom、msoBarFloating、msoBarPopup(用于创建快捷菜单)或 msoBarMenuBar(仅用于 Apple Macintosh)。
Visible 

指定控件是可见的,还是隐藏的。

以下代码示例创建名为 My Command Bar 的自定义命令栏: 
Sub MenuBar_Create() Application.CommandBars.Add Name:="My command bar" End Sub

以下代码示例返回活动菜单栏的名称:
Sub MenuBars_GetName()   
   MsgBox CommandBars.ActiveMenuBar.Name   
End Sub

您还可以通过使用 Temporary:=True 参数来创建自定义命令栏。Temporary:=True 参数允许命令栏在您退出 Excel 时自动重置。以下代码使用 Temporary:=True 参数创建自定义命令栏:
Sub MenuBar_Create()   
Application.CommandBars.Add Name:="My command bar", Temporary:=True  
End Sub

在模块中:

针对sheet中的退出按钮

Sub 退出系统()
'
MsgBox "歡迎您下次再使用,如有意見請與我聯系!!"

ActiveWorkbook.Save '自动保存

ActiveWorkbook.Close '关闭表,相当于ctrl+f4
End Sub

引用链接:http://hi.baidu.com/winas/item/5fdb2b267dd9e84646996280

使用Excel VBA(快捷键)(加菜单)的更多相关文章

  1. Excel VBA 快捷键 代码

    一. 在ThisWorkbook中 Private Sub Workbook_Open() '%对应alt键 宏不能加() Application.OnKey "%q", &quo ...

  2. Excel VBA语句集

    Excel VBA语句集 引子 最近批阅学生成绩,用Excel 处理学生成绩,用到VBA 提高办公效率.需要经常查阅VBA的一些用法 正文 定制模块行为 (1) Option Explicit '强制 ...

  3. 如何调试Excel VBA代码

    Excel VBA出错时给出的错误信息极少,需要充分利用各种工具来进行调试. 1.编译错误 常见的编译错误有: 错误的源代码格式,比如if后面缺少then:在编辑器中该行会变成红色. 错误的语法结构, ...

  4. Excel VBA(宏):添加宏

    写在前面: .编写宏,打开VBA,双击ThisWorkbook对当前工作薄进行编写宏:双击Sheet1,对整个sheet编写宏: 或者创建模块,在模块里,编写.调试代码. 打开VBA的方法见第一讲,结 ...

  5. 2017-5-29 Excel VBA 小游戏

    ---恢复内容开始--- 转一个Excel VBA的小游戏,最近对excel有了更深入的了解,功能很强大,也刷新了我对待事情的态度. 一.准备界面 我们先来把游戏界面准备好,选中前4行,行高调成50, ...

  6. Excel vba:批量生成超链接,添加边框,移动sheet等

    Excel vba 操作 批量生成sheet目录并添加超链接 Sub Add_Sheets_Link() 'Worksheets(5)为清单目录页 '在sheet页上生成sheet页名字并超链接 To ...

  7. Excel VBA 操作 Word(入门篇)

    原文地址 本文的对象是:有一定Excel VBA基础,对Word VBA还没有什么认识,想在Excel中通过VBA操作Word还有困难的人.   一.新建Word引用 需要首先创建一个对 Word A ...

  8. Excel VBA入门(九)操作工作薄

    虽然我前面讲过,在VBA中操作工作薄并不是件明智的事,但有些时候,还是避免不了要这么做.绝大多数情况下,我们要做的是获取到某个工作薄对象,并以此来获得其中的工作表对象,然后再对工作表中的数据进行处理. ...

  9. Excel VBA入门(七)注释、宏按钮及错误处理

    系统性的知识前面已经讲完,从本章开始,本系列教程涉及的将会是一些相对凌散的内容. 1. 注释 代码注释是一件利人利己的事,为了方便自己在代码需要更新修改时,依然能够快速地看懂自己完的每一行代码到底是什 ...

随机推荐

  1. scratchIDE使用说明

    scratchIDE使用说明

  2. Java IO(二) 之 InputStream

    源代码均以JDK1.8作为參考 前言: InputStream实现了两个接口Closeable和AutoCloseable: Closeable:JDK1.5中引入,Closeable接口中仅仅有一个 ...

  3. IDEA无法启动:Failed to create JVM:error code -4

    发生该错误的原因是由于IDEA须要使用的连续内存空间没有得到满足,解决方式: 1.减小-Xmx和-XX:PermSize的值     切换到IDE_HOME\bin\文件夹下,找到<produc ...

  4. C#重构经典全面汇总

    C#重构经典全面汇总 1.  封装集合 概念:本文所讲的封装集合就是把集合进行封装,仅仅提供调用端须要的接口. 正文:在非常多时候,我们都不希望把一些不必要的操作暴露给调用端,仅仅须要给它所须要的操作 ...

  5. spark 从RDD createDataFrame 的坑

    Scala: import org.apache.spark.ml.linalg.Vectors val data = Seq( (7, Vectors.dense(0.0, 0.0, 18.0, 1 ...

  6. POJ 3273 二分答案

    思路:二分答案经典题吧....注意边界就OK了 //By SiriusRen #include <cstdio> #include <algorithm> using name ...

  7. 机器学习规则:ML工程最佳实践----rule_of_ml section 3【翻译】

    作者:黄永刚 ML Phase III: 缓慢提升.精细优化.复杂模型 第二阶段就已经接近结束了.首先你的月收益开始减少.你开始要在不同的指标之间做出平衡,你会发现有的涨了而有的却降了.事情变得有趣了 ...

  8. jqueryValidator自定义校验规则的一种方式(覆盖源码)

    1.自定义js文件:jqValid-extend.js 内容: function setDefaultValidate(){ $.extend(true, $.validator, { // 方法 m ...

  9. c# protected public private internal

    1 internal 只能在一个项目中引用,不能跨项目引用,只有在同一程序集的文件中 2 public 最高级别的访问权限 对访问公共成员没有限制 3 private 最低级别的访问权限 只能在声明它 ...

  10. UVa 208 Firetruck【回溯】

    题意:给出一个n个节点的无向图,以及某个节点k,按照字典序从小到大输出从节点1到节点k的所有路径 看的题解 http://blog.csdn.net/hcbbt/article/details/975 ...