【VBA研究】EXCEL启动时自动启动窗体

作者:iamlaosong

VBA编程时为了界面美观,我们经常用到窗体Form,那么,如何做到让VBA窗体在EXCEL启动时自动运行呢?

方法有二,第一,双击ThisWorkbook,输入以下代码(Open事件):

Private Sub Workbook_Open()

UserForm1.Show

End Sub

第二,也可以插入一个模块,输入下面自启动代码:

Sub Auto_Open()

UserForm1.Show

End Sub

两种方法都可以启动VBA窗体。上面两个过程其实就是一个自启动过程,除了启动窗体,还可以干很多其他的事情,比如增加菜单,总之,一些需要在Excel启动后就完成的功能都可以放在这些过程中。下面是一个增加菜单的程序:

Open事件:

Private Sub Workbook_Open()

AddNewMenu

End Sub

模块中AddNewMenu过程,本过程也可以直接放在Open方法中,这样写是为了可读性。

'添加菜单项
'与添加新菜单一样,在添加菜单项及子菜单时,使用Add方法,且指定合适的控件类型,其代码清单如下:
Sub AddNewMenu()
    Dim HelpMenu As CommandBarControl
    Dim NewMenu As CommandBarPopup
    Dim MenuItem As CommandBarControl
    Dim SubMenuItem As CommandBarButton

    On Error Resume Next

    '如果菜单已存在,则删除该菜单
    CommandBars(1).Controls("循环取货(&X)").Delete
    '利用ID属性查找帮助菜单
    Set HelpMenu = CommandBars(1).FindControl(ID:=30010)

    If HelpMenu Is Nothing Then
        '如果该菜单不存在,则将新菜单添加到末尾
        '设置新菜单为临时的
        Set NewMenu = CommandBars(1).Controls.Add(Type:=msoControlPopup, Temporary:=True)
    Else
        '将新菜单添加到帮助菜单之前
        Set NewMenu = CommandBars(1).Controls.Add(Type:=msoControlPopup, Before:=HelpMenu.Index, Temporary:=True)
    End If

    '添加菜单标题并指定热键
    NewMenu.Caption = "循环取货(&X)"

    '添加第一个菜单项
    Set MenuItem = NewMenu.Controls.Add(Type:=msoControlButton)
    With MenuItem
        .Caption = "导入看板(&K)..."
        '添加快捷键
        .ShortcutText = "Ctrl+Shift+K"
        .FaceId = 590       ' 不同的数值代表不同的图标
        .OnAction = "ImpKanban"
    End With

    '添加第二个菜单项
    Set MenuItem = NewMenu.Controls.Add(Type:=msoControlButton)
    With MenuItem
        .Caption = "导入清单(&Q)..."
        '添加快捷键
        .ShortcutText = "Ctrl+Shift+Q"
        .FaceId = 162
        .OnAction = "ImpQingdan"
    End With

    '添加第三个菜单项
    '本菜单有子菜单项,因此其类型为msoControlPopup
    Set MenuItem = NewMenu.Controls.Add(Type:=msoControlPopup)
    With MenuItem
        .Caption = "数据报表(&R)..."
        '添加分隔线
        .BeginGroup = True
    End With
    '添加子菜单
    '添加第一个子菜单
    Set SubMenuItem = MenuItem.Controls.Add(Type:=msoControlButton)
    With SubMenuItem
        .Caption = "月汇总(&M)"
        .FaceId = 110
        .OnAction = "MonthRpt"
    End With
    '添加第二个子菜单
    Set SubMenuItem = MenuItem.Controls.Add(Type:=msoControlButton)
    With SubMenuItem
        .Caption = "季度汇总(&Q)"
        .FaceId = 222
        .OnAction = "SeasonRpt"
    End With
End Sub

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2025-01-07 16:23:45

【VBA研究】EXCEL启动时自动启动窗体的相关文章

javaweb项目启动时自动启动rmi服务器实例

1.我们先写一个web项目启动时需要运行的类RmiRegisterServlet.java package com.mx.Servlet; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import com.mx.framework.daoimpl.RMIServerDAOImpl; @SuppressWarning

[原]excel启动时死锁

项目中遇到的一个死锁问题! 代码大概如下: 调用SetWinEventHook安装了进程内钩子,dll注入到excel进程后,专门开启一个线程来分发监听到的事件信息,并在该线程内会获取IAccessible接口并取相应的属性. 下面开始分析dump --------------------------------------------------------------------------------------------------------------------------- 因

Tomcat启动时自动加载Servlet

1.想做一个服务启动时自动启动一不停止的获取订阅功能 2.之前是做一个Jsp页面请求servlet来触发方法 3.现在实现Tomcat启动时自动加载Servlet 1.Tomcat中启动Servlet时,只需要在Servlet所在的工程的配置文件web.xml中写成如下即可 <!-- 自动启动订阅接口 --> <servlet> <servlet-name>TimeServlet</servlet-name> <servlet-class>ser

用VBA取得EXCEL有效行列数方法研究

作者:iamlaosong 我常用下面方式取得有效行数: maxrow=sheets(1).[A65536].End(xlUp).Row 实际使用中发现这种方法存在2个问题: 1.高低版本不兼容,2007版最大行数增加以后,就不能用65536了,而要用1048576,即 maxrow = sheets(1).[A1048576].End(xlUp).Row 2.当最后一行不为空时,用这个方法取不到正确的值. 下面说明用VBA得到EXCEL表格中的行数和列数的特点,以便根据需要选用 每种方法中上面

【VBA研究】用VBA取得EXCEL随意列有效行数

作者:iamlaosong 用VBA对Excel文件进行处理的时候,keyword段的列号编程时往往是不知道的.须要通过參数设定才干知道,因此.我们编程的时候,就不能用这种语句取有效行数: lineno = [B65536].End(xlUp).Row          '从下至上找有效行数 上述语句中的列名"B"假设是变量.能够用字符串连接的方式实现,即: pos_ems = "C" lineno = Range(pos_ems & "65536

通过VBA在Excel中添加菜单和菜单项按钮(Excel启动时候添加)

将以下代码保存到.xlam或.xla(Excel97-2003)文件. 在ThisWorkBook对象中,添加Workbook_Open事件,调用启动菜单过程. Private Sub Workbook_Open() Call MenuSetup(True) End Sub '----------------------------------------------- '在Excel中添加菜单和菜单项按钮(Excel启动时候添加) '------------------------------

【VBA研究】用VBA取得EXCEL任意列有效行数

作者:iamlaosong 用VBA对Excel文件进行处理的时候,关键字段的列号编程时往往是不知道的,需要通过参数设定才能知道,因此,我们编程的时候,就不能用这样的语句取有效行数: lineno = [B65536].End(xlUp).Row 上述语句中的列名"B"如果是变量,可以用字符串连接的方式实现,即: pos_ems = "C" lineno = Range(pos_ems & "65536").End(xlUp).Row 如

Web应用启动时,后台自动启动一个线程(转)

原文:http://blog.sina.com.cn/s/blog_6810dfc20101ipzq.html Web应用启动时,后台自动启动一个线程 (1)前言 前几天,manager问道一个问题:能不能实现类似于cron的后台管理方式.问题解决后,想对这几个问题进行一下简单的总结.以便抛砖引玉!首先简单的提及一下cron. Cron,计划任务,是任务在约定的时间执行已经计划好的工作,这是表面的意思.在Linux中,我们经常用到 cron 服务器来完成这项工作.cron服务器可以根据配置文件约

Excel VBA入门(十)用户窗体开发

VBA 中的用户窗体就是指带 UI 的用户界面,在运行的时候会单独弹出一个窗口,类似于在 windows 系统中运行的一个可执行程序一样(这个说法不太严谨,因为可执行程序也可能是只有命令窗口而没有 UI 的).再具体一点,就是一个窗口界面当中,有可能会包含有文本框.复选框.单选按钮.下拉列表,就如在网页中填写的表单一样.再具体一点,就是如下图这样的: 1. 用户界面设计 如上图,UI 设计的部分其实是很简单的,微软的特色,直接拖拉拽就可以实现了.而每一个控件(或者称为元素,也即放进窗体中的各种按